const使用及意义-----const int* p和int* const p

文章介绍了C++中const修饰符在变量、指针和函数参数中的使用,强调了如何保护变量不被意外修改,以及const修饰函数返回值的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.修饰变量

1.1.const int* p

int n=10;
int m=20;
const int* p=&m;
//此时const修饰 *p,也就是p保存的地址里面的值不能改变,若*p=60,则会报错
但是可以改变p存放的地址:
p=&n;
printf("%d",*p);//打印结果是10


1.2. int* const p

int n=10;
int m=20;
int* const p=&n;
//此时const只修饰p,也就是p的值只能为&n,无法修改,若p=&m 会报错
但是可以改变*p的值:
*p=60;
//虽然p存放的&n无法修改,但是*p得到的n的值可以修改为60
printf("*p=%d,n=",*p,n);//打印结果为60,60

2.修饰函数

2.1.修饰函数的形参

void StringCopy(char* dest, const char* src);

这个字符串copy函数中,把src指向的字符串复制到dest中,也就是src的值是不需要改变的,而dest指针指向的值改变。对*src加上const后就可以防止其中的值被修改,起到保护作用。

而起到保护作呕也能够的原因是:

在实参中,指针会指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个临时指针变量的地址与实参的地址不同,但却指向同一块空间地址。那么形参加上const 修饰之后,保护了这一块内存地址不被修改,如果刻意修改这一块内存,编译器会报错。当然,如果使用c++中的引用,效率会比指针更高,因为引用本身是一个变量,而这个变量仅仅是另外一个变量的别名,它不是指针,不占用内存空间,不会产生临时指针变量,并且不存在NULL空引用,无需assert,比指针更安全。同时,理论上指针的级数没有限制;但引用只有一级。
即不存在引用的引用,但可以有指针的指针。

2.2.修饰函数的返回值

如果用const修饰返回值类型为指针,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。

const char * GetString(void);
//const修饰的函数返回值类型是char*

那么:

char *str = GetString();//报错,没有const修饰

const char *str = GetString();//正确

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值