C语言指针

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

C语言指针

Emphatic   2022-06-19 我要评论

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};

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们