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

  • Post author:
  • Post category:其他





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’;)。没有代码,自己理解,理解了就可以关了,没理解就重新循环再看看上面两点吧。



















版权声明:本文为u012891055原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。