C语言 指针_野指针 指针运算

野指针:

概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

指针非法访问:

复制代码
int main()
{

	int* p;
	//p没有初始化,就意味着没有明确的指向
	//一个局部变量不初始化,放的是随机值:0xcccccccc
	//
	*p = 10;//非法访问内存了


	return 0;
}

指针越界访问:

复制代码
int main()
{

	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i <= 11; i++)
	{
		//当指针指向的范围超出数组arr的范围时,p就是野指针
		*(p++) = i;
	}
	return 0;
}

指针指向的空间释放:

复制代码
int* test(void)
{
	int a = 0;
	return &a;
}


int main()
{
	int* pi = test();//这个时候pi属于野指针


	return 0;
}

如何避免野指针

1.指针初始化

2.小心指针越界

3.指针指向空间释放即使置NULL

4.避免返回局部变量的地址

5.指针使用之前检查有效性

复制代码
int main()
{

	//int* pi = NULL;
	//*pi = 100;//err

	int* pi = NULL;//指针初始化 NULL -> 0
	if (pi != NULL)
	{
		*pi = 100;//ok
	}
	return 0;
}

指针运算

指针+-整数

cs 复制代码
#define N_VALUES 5
int main()
{

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

	return 0;
}

另一种写法

cs 复制代码
int* p = arr;
	for (i = 0; i < sz; i++)
	{
		*(p + i) = 1;
	}

指针-指针

指针-指针(绝对值)得到的是指针和指针之间的元素的个数

不是所有的指针都能相减,指向同一块空间的指针才能相减(有意义)

相关推荐
方璧2 小时前
限流的算法
java·开发语言
Hi_kenyon3 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终3 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
iuu_star3 小时前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
ghie90903 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng3 小时前
Inno Setup(专业安装/更新 EXE)
开发语言
吴声子夜歌4 小时前
Java数据结构与算法——基本数学问题
java·开发语言·windows
wanglei2007085 小时前
生产者消费者
开发语言·python
leo__5205 小时前
基于菲涅耳衍射积分的空心高斯光束传输数值模拟(MATLAB实现)
开发语言·matlab