C语言简明介绍指针的使用

 更新时间:2022年06月14日 09:21:05   作者:Emphatic  
C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍

1. 指针类型

指针以字节为单位;

指针类型决定了解引用时能访问的空间的大小;也决定了指针的步长(指针+1走多远)

2. 野指针

  • 指针未初始化
  • 指针越界访问
  • 指针指向的空间已释放
int* test()
{
	int a = 10;//野指针
	return &a;
}
int main(){
	int* p =  test();
	//test函数里的a是局部变量,出函数时,储存变量的空间已经还给操作系统了
	printf("%d\n",*p);
	//此时通过解引用不能再访问到a;
}

如何规避野指针呢?

  • 指针初始化
  • 小心指针越界
  • 指针指向空间释放即使置NULL
  • 避免返回局部变量的地址
  • 指针使用之前检查有效性

3. 指针的运算

3.1 指针+-整数

	int arr[5] = {0,1, 2, 3, 4};
	int* p = arr;
	int i = 0;
	for(i=0; i<5; i++)
	{
		//printf("%d ",*p);
		//p++;
		printf("%d ",*p++);//以上两种写法相同
	}

3.2指针-指针

得到的是中间元素的个数,可以用来求字符串的长度

int my_strlen(char* arr)
{
	char* start = arr;
	char* end = arr;
	while(*end != '\0')
	{
		end++;
	}
	return end - start;
}

3.3 指针的关系运算

其实就是指针比较大小。实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免这样写,因为标准并不保证它可行。

	float values[5];
	float *vp;
	int i = 0;
	for (vp = &values[0]; vp < &values[5];)
	{
		*vp++ = 0; 
	}

4. 指针数组

存放指针的数组

    int a; int b; int c;
	int* arr[3] = {&a,&b,&c};

到此这篇关于C语言简明介绍指针的使用的文章就介绍到这了,更多相关C语言指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C/C++内存管理基础与面试

    C/C++内存管理基础与面试

    本章主要介绍C语言与C++的内存管理,以C++的内存分布作为引入,介绍C++不同于C语言的内存管理方式(new delete对比 malloc free),感兴趣的朋友来看看吧
    2022-07-07
  • C++实现编码转换的示例代码

    C++实现编码转换的示例代码

    这篇文章主要介绍了C++实现编码转换的示例代码,帮助大家快捷的实现编码转换,感兴趣的朋友可以了解下
    2020-08-08
  • 编译错误error: stray ‘\343’in program的解决方法

    编译错误error: stray ‘\343’in program的解决方法

    以下是对编译错误error: stray ‘\343’in program的解决方法进行了详细的分析介绍,如遇此问题的朋友们可以过来参考下
    2013-07-07
  • Qt之使用GraphicsView框架实现思维导图的示例

    Qt之使用GraphicsView框架实现思维导图的示例

    思维导图可以更方便的整理知识,本文主要介绍了Qt之使用GraphicsView框架实现思维导图的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Matlab绘制酷炫坐标区域的方法详解

    Matlab绘制酷炫坐标区域的方法详解

    这篇文章主要为大家详细介绍了如何利用Matlab编写一个能让坐标区域变得很炫酷的修饰函数,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-05-05
  • C++中的volatile关键字及其作用

    C++中的volatile关键字及其作用

    本文介绍了C++中的volatile关键字,它用于标识变量可能被意外修改,以及编译器不应进行优化。本文通过具体的代码示例,阐述了volatile关键字的作用和使用方法,帮助读者更好地了解该关键字在C++语言中的应用场景和实现原理
    2023-04-04
  • 浅析C++中memset,memcpy,strcpy的区别

    浅析C++中memset,memcpy,strcpy的区别

    本篇文章是对C++中memset,memcpy,strcpy的区别进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • C++实现一维向量旋转算法

    C++实现一维向量旋转算法

    这篇文章主要介绍了C++实现一维向量旋转算法,非常实用的经典算法,需要的朋友可以参考下
    2014-08-08
  • 深入理解Qt中各种消息框对话框的使用

    深入理解Qt中各种消息框对话框的使用

    本篇文章主要介绍了Qt中各种消息框的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • C++ 中 <iterator> <functional> <numeric> 库好用的函数详解

    C++ 中 <iterator> <functional>&nbs

    这篇文章主要介绍了C++ 中 <iterator> <functional> <numeric> 库好用的函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11

最新评论