参考自:《C和C++程序员面试秘籍》
指针常量:它本身不能被修改,指向的内容可以被修改。
常量指针:它本身可以被修改,指向的内容不能被修改。
const char *node1 = "abc";
char *const node2 = "abc";
char *node3 = "abc";
node1[2] = 'k';/*error: assignment of read-only location ‘*(node1 + 2u)’*/
*node1[2] = 'k';/*invalid type argument of unary ‘*’ (have ‘int’)*/
*node1 = "xyz";/*error: assignment of read-only location ‘*node1’*/
node1 = "xyz";/*ok*/
node2[2] = 'k';/*运行时错误*/
*node2[2] = 'k';/*error: invalid type argument of unary ‘*’ (have ‘int’)*/
*node2 = "xyz";/*warning: assignment makes integer from pointer without a cast [enabled by default]*/
node2 = "xyz";/*error: assignment of read-only variable ‘node2’*/
node3 = "xyz";/**/
node1和node2分别是常量指针和指针常量,一个不能修改内容,一个不能修改指向;而且它们在初始化时都指向了常量字符串“abc”,因此,它们对于指向内存的修改都是非法的。如果是对node1操作,会出现编译时错误;如果对node2操作,会出现运行时错误。