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

指针-指针

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

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

相关推荐
进击的程序猿~19 小时前
Go Interface源码深度解析指南
开发语言·后端·golang
Data_Journal19 小时前
如何使用 Java 和 Jsoup 解析 HTML
大数据·开发语言·数据库·python·scrapy
吃好睡好便好19 小时前
MATLAB仿真框图2
开发语言·matlab·仿真·simulink
小当家.10520 小时前
MCP 协议深度解析:AI 领域的 USB-C 接口
开发语言·人工智能·agent·tool·mcp
accept 99%21 小时前
python版提取 PDF 的常用第三方库与工具
开发语言·python·pdf
lzhdim21 小时前
C# 通过 Windows API 实现进程内存读写操作
开发语言·windows·c#
-银雾鸢尾-21 小时前
C#中的预处理指令
开发语言·c#
Livia要学习21 小时前
Python面向对象三大特性:封装、继承、多态
开发语言·python
dalong1021 小时前
Savitzky-Golay 的C# 实现
开发语言·kotlin·c#
十月的皮皮21 小时前
STM32从零到量产开发:四路继电器工业控制模块开发 -上位机 Program.cs 应用程序入口设计说明
c语言·stm32·单片机·stm32cubemx·hal库