5分钟理解不遗忘const char *p,char *const p和const char *const p的区别

const是一个C语言的关键字,它限定一个变量不允许被改变,知道这个就能读懂这篇博客。

要理解他们的用法一定不要从左往右理解,要从指针符号*处分割理解,可以在*左边加个<-符号辅助理解,<-符号无实意。

1.比如const char *p就可以看成const char <- *p,意思是一个指针p指向一个const char常字符类型数据的地址,p是可指向其他地址的,而被指向的值是个不能改变的常量。

#include <iostream>
int main()
{
 	const char a = 'a';
	const char b = 'b';
	char c = 'c';
	const char *p = &a;
	p = &b;//正确,p由a的地址指向了b的地址
	//p = &c;//错误,p指向的是const char类型,不是char类型。
	//a = 'b';//错误,因为a是const类型。综上所述p是可指向其他地址的,而被指向的值是常量。	
}


很多人把char const *p 和 const char *p混淆就是从左往右理解造成的,其实这两句话意思是一样的,只是不同的程序员有不同的习惯,意思都是一个指针p指向一个const char常字符类型数据。

2.char *const p可以看成char <- *const p,意思是一个常指针p指向char类型数据的地址,既然是常指针,那么p就不可指向其他地址,而被指向的值可改变,因为被指向的是char类型数据,当然是可改变的。

#include <iostream>
int main()
{
 	char a = 'a';
	char b = 'b';
	const char c = 'c';
	
	//char *const p = &c;//错误,p指向char类型数据
	
	char *const p = &a;//正确
	//p = &b;//错误,p是常指针,不能改变p指向的地址。

	a = 'b';//正确,此时*p的值也是'b'
}
3.const char *const p一个常指针指向一个常量。结合上面两点,常指针,不能改变p指向的地址值(即p = &a;又p = &b;),常量,不能改变p指向地址值的值(即p = &a;又 a = 'b';)。没有代码,自己理解,理解了就可以关了,没理解就重新循环再看看上面两点吧。





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值