1.const int *p=“hello”;
这个意思就是这个指针变量p指向的内容不能改变,但是可以改变让p指向其他的地址。
const char *p=“hello”;
p=“ok”;
printf("%s",p);
所以这个的运行结果就是ok,如果稍加修改
const char *p=“hello”;
p[0]=‘o’;
printf("%s",p);
这样编译的时候就会出现问题。
2.char *const p=“hello”;
这个意思就相反,指针指向的内容可以改变,但是不能改变指针的指向。
char *const p=“hello”;
p[1]=‘w’;
printf("%s",p);
会出现下述的结果
但是这样也是错误的,原因是这里是字符串和字符在windows下是存在常量存储区也是不可改写的所以我们修改一下程序
int n=3;
int * const p=&n;
*p=5;
printf("%d",*p);
那这样运行的结果就是5,完全正确,但是
int n=3,m=3;
int *const p=&n;
p=&m;
printf("%d",*p);
这样就会出现问题。
还需要注意一点就是,我们这样写也是错误的,这是初学者容易犯的错误。
int n=3;
int * const p;
p=&n;
printf("%d",*p);
我们要在这个常量指针定义的时候就赋值。
为了方便记忆我们可以这样理解
const int *p;
因为p是一个指向int型数据的指针,如果我们const int就是把这个int数据变成常量,所以p指向的数据当然是不可修改的啦。
而int *const p;
就是把指针变成一个常量,里面存的地址当然不可以改变,但是指向的另一个值并没有定义为常量,自然是可以改变的。
当然啦,
const int *const p;
这样写也是完全正确的啦!