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