手把手教你深入理解指针,超级超级详细(2)

2025博客之星年度评选已开启 10w+人浏览 1.1k人参与

前言

这一章主要讲了const修饰指针和assert断言
制作不易,求个关注

一、const修饰指针

const是常属性的意思
const修饰指针时可以在*的左边和右边,意义不一样。
const int * pa ;修饰的是指针指向的内容,*pa不可以被修改,但是pa可以改,可以让pa指向其他变量的地址。
int * const pa;修饰的是指针变量本身pa,pa不可以改,*pa可以改

二、野指针

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

1.原因

1.指针没有初始化

#include <stdio.h>
int main()
{
	int* p;//局部变量指针未初始化,默认为随机值
	*p = 20;
	return 0;
}

2.指针越界访问

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

3.指针指向的空间被收回

#include <stdio.h>
int* test()
{
	int n = 100;
	return &n;
}
int main()
{
	int* p = test();//把n的地址传过来时,n的内存已经被收回了
	printf("%d\n", *p);
	return 0;
}

办法

指针要初始化
不用时要及时置空;例:int * pa=NULL;
下次使用时要检查指针是不是有效。
避免返回局部变量的地址。

assert断言

assert.h这个头文件定义了assert()宏
assert(pa != NULL)
上面这个代码会验证pa是否等于NULL,不等于就继续运行,等于就会终止,并打印报错信息。

传址调用和传值调用

传值调用就是实参传给形参时,把数值传递过去,改变形参不影响实参
传址调用就是把实参的地址传过去的,改变形参就是改变实参


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值