您的位置:首页 > 其它

const修饰指针的情况分析

2012-04-15 21:52 211 查看
C语言关键字const是用来限定一个变量不允许被改变的修饰符,当它和指针结合的时候有下面2种情况:

1、const放在*前面, const char *p1, p1表示指向常量的指针,这时p1本身可以变化,也就是可以重新指向,但是指向的内容不能修改

const char *p1 = "hello";
p1++;  // ok
p1[0] = 'w'; // compile error


2、const放在*后面, char* const p1, 意思是p1是一个const指针,指向一个字符串,这时p1本身不能改变但是指向的内容可以变化,也就是如下代码

char* const p1 = "hello";
p1++;  // compile error
p1[0] = 'w'; // ok in compile


上面第3行代码咋一看没问题,编译也没错,但是运行的时候就报错。原因在于p1指向的是一个常量字符串"hello",这里

char* const p1 = "hello";


等价于

char msg[] = "hello";
const char* const p1 = msg;


所以上面出错的语句改成如下就不会有问题了:

char msg[] = "hello";
char* const p1 = msg;
p1[0] = 'w';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: