回 帖 发 新 帖 刷新版面

主题:请教const用法及区别,

最近写了一些测试程序还是比较迷茫。
请高手指教一下以下三条语句的区别
char * const a;
char const *a;
const char *a; 

回复列表 (共5个回复)

沙发

后两条一样。
到底是指向const内容还是指针本身是const是看它是在指针的左侧还是右侧。

板凳

char * const a;
char const *a;
const char *a;
第一条是限制更改a指向的内容
第二三条是限制a指向其他内容

3 楼

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 楼

这个是我以前看的,不能保证一定正确。做为程序员,不能根据自己的记忆乱说。于是我写了代码验证了下。
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 楼

抄书的不知道他说的对不对。
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是一个常量

我来回复

您尚未登录,请登录后再回复。点此登录或注册