1.定义两个字符变量,如下:
char name[10] = "abcde";
char age[10] = "28";
则下面两种const用法是等效的,都是表示*p的值不可改变(只读),但是p指针可以改变
const char *p = name; //等效const char* p = name; 常量指针
char const *p = name; //等效char const* p = name; 常量指针
所以如下打印语句可以通过
for(int j=0; j<5; j++){
printf("%s\n", p++);
}
打印结果是:
abcde
bcde
cde
de
e
但是,下面这种操作就会导致编译出错
*p = '1';
printf("%s\n", p);
编译报错信息:
error: assignment of read-only location ‘*p’
*p = '1';
^
2.同样定义两个字符变量
char name[10] = "abcde";
char age[10] = "28";
同时,定义指针 p,如下所示,表示指针p是一个常量,不可改变(只读),但是指针所指向的内容*p可以改变
char *const p = name; //指针常量
所以如下打印语句会导致编译错误
for(int j=0; j<5; j++){
printf("%s\n", p++);
}
编译错误信息:
error: increment of read-only variable ‘p’
printf("%s\n", p++);
^
但是,对*p的直接操作,可以编译通过
*p = '1';
printf("%s\n", p);
打印信息如下:
1bcde
本文深入探讨了C++中指针与const限定符的使用,详细解析了constchar*p与char*constp的区别,以及它们如何影响指针的可修改性和所指向数据的可更改性。通过实例演示了不同情况下编译器的反应,帮助读者理解const限定符在指针声明中的作用。
3234

被折叠的 条评论
为什么被折叠?



