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

指针-指针

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

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

相关推荐
2601_9620715722 分钟前
类变量和全局变量的查找路径有什么区别?
开发语言·python
\光辉岁月/1 小时前
5.java-数组
java·开发语言
Java后端的Ai之路1 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang2 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人2 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理2 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071572 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
Wang's Blog2 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
Dovis(誓平步青云)3 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
sunshine22 girl3 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习