在刚开始学习的时候总是容易把常量指针和指针常量弄混,幸好就是里面的那个变那个不能变能分清,也许是用来几次的缘故,可是名字记不住,这次写下来,希望以后不会再网!
其实关键就是要弄清const在*的左边还是右边,左边值不能变,常量指针;
在右边指针常量,地址不能改变;
两边都有就是常量指针常量,此生此世,水滴石穿,沧海桑田,海枯石烂,山无棱,地无角,天地合,还是不能改变!
#include <stdio.h>
int main()
{
const int a=100;
const int b=222;
int c=333;
//------------------常量指针;--[指向常量的指针]---------------
//const在*号的左边时,*p是常量---只读变量;
int const *p=&a;
const int *p1=&a;
*p=c; //error: *p是一个常量,不能被改变;
printf("%d\n",*p);
p=&c; //OK :指针的值可以修改;
printf("%d\n",*p);
//-------------------指针常量;--[指针本身是常量]----------------
//const 在*号的右边时,p是常量---只读变量;
int * const p2=&b;
p2=&c; //error: 指针是个常量,不能改变;
printf("%d\n",*p2);
*p2=c; //OK: 指针的值可以次改;
printf("%d\n",*p2);
//------------------指向常量的指针常量---[常量指针常量]----------
//*号的左右两边都有const,则p3和*p3都是常量;都不可改变;
const int *const p3=&a;
p3=&c; //error: p3指针是一个常量,不能改变;
*p3=c; //error: *p3的值是一个常量,不能被改变;
printf("%d\n",*p3);
return 0;
}