主题:请教const用法及区别,
nana_aoe
[专家分:60] 发布于 2011-05-04 10:10:00
最近写了一些测试程序还是比较迷茫。
请高手指教一下以下三条语句的区别
char * const a;
char const *a;
const char *a;
回复列表 (共5个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-05-04 11:03:00
后两条一样。
到底是指向const内容还是指针本身是const是看它是在指针的左侧还是右侧。
板凳
ucchen [专家分:80] 发布于 2011-05-04 22:05:00
char * const a;
char const *a;
const char *a;
第一条是限制更改a指向的内容
第二三条是限制a指向其他内容
3 楼
xiongfenglove [专家分:30] 发布于 2011-05-12 14:58:00
char * const a; //const a is pointer to char*
char const *a; //same with next
const char *a; //a is pointer to const char
上面是一个外国C++巨著中讲到的。我忘记名字了。
第1个a是一个const变量,a的值不能变,但是a所指向的内存中的值可以变。
第2,3个a是一个普通指针,但是a指向的内存区域确是const的。所以a的值可以变,但是a所指向的内存中的值不能变。
作者说:read from right to left。
如是而已。
希望对楼主有帮助。
4 楼
xiongfenglove [专家分:30] 发布于 2011-05-12 15:04:00
这个是我以前看的,不能保证一定正确。做为程序员,不能根据自己的记忆乱说。于是我写了代码验证了下。
char* b = "b";
char* c = "c";
char * const a = b;
*a = 'd';
a = c;
return 0;
编译后提示error C3892: 'a' : you cannot assign to a variable that is const
所以,我还没有记错。^_^
5 楼
酱爆鱼虾蟹 [专家分:40] 发布于 2011-05-17 18:24:00
抄书的不知道他说的对不对。
int n=4;
int *p=&n;
++(*p); //正确:将*p+1
++p; //正确:将指针p+1
int *const ep=&n; //一个指向int型数的指针常量
++(*ep); //正确:将*ep加1
++ep; //非法:指针ep是常量
const int k=88; //一个型常量
const int *pe=&k; //一个指向int型常量的指针
++(*pe) //非法:*pe是一个常量
++pe //正确:将指针pe加1
const int * const epe=&k;//一个指向int型常量的指针常量
++(*epe) //非法:*epe是一个常量
++epe //非法:指针epe是一个常量
我来回复