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

指针-指针

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

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

相关推荐
CryptoPP19 分钟前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
18你磊哥24 分钟前
chromedriver.exe的使用和python基本处理
开发语言·python
小坏讲微服务38 分钟前
Spring Cloud Alibaba 整合 Scala 教程完整使用
java·开发语言·分布式·spring cloud·sentinel·scala·后端开发
Kiri霧39 分钟前
Scala 循环控制:掌握 while 和 for 循环
大数据·开发语言·scala
闲人编程1 小时前
Python的抽象基类(ABC):定义接口契约的艺术
开发语言·python·接口·抽象类·基类·abc·codecapsule
qq_172805591 小时前
Go 语言结构型设计模式深度解析
开发语言·设计模式·golang
lkbhua莱克瓦241 小时前
集合进阶8——Stream流
java·开发语言·笔记·github·stream流·学习方法·集合
20岁30年经验的码农2 小时前
Java Elasticsearch 实战指南
java·开发语言·elasticsearch
雾岛听蓝2 小时前
C++ 类和对象(一):从概念到实践,吃透类的核心基础
开发语言·c++·经验分享·笔记
CoderYanger2 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节