首页 新闻 会员 周边

const修饰指针时候的一个奇怪疑问……

0
悬赏园豆:10 [待解决问题]

看了很多大大的文章,介绍c/c++中const的用法,感觉归纳的确实挺好的,特别是当const修饰指针的时候,讲到利用const在*的左右方位来判断其限定的目标,但是有一个小疑问:

eg:

char string[] = "abc";
const char *p = string;   //此时const限定p的指向,也就是*p是不能变的;
p++;     //但是指针本身p是可以变的

此时我的疑问是,打印发现

printf(“%c”,*p);//输出为b,也就是p的指向发生了变化……

这不是矛盾了吗?

悬崖边的石头的主页 悬崖边的石头 | 初学一级 | 园豆:184
提问于:2012-05-16 22:45
< >
分享
所有回答(1)
0

const char *p = string;   //此时const限定p的指向,也就是*p是不能变的;

你的注释里就说明了问题啊。

假如是char *p = string,那么你可以:p[0] = 'd',但是因为const char *p=strig,有了const,内容不可以修改,于是p[0] = 'd'是会报告错误的。

p++能执行,那是p本身还是一个变量,是一个指针变量。(p本身是一个变量,const修饰的是p指向的内容,这个定义就解决了一个很大的问题:有时我们希望传递一个数据对象给目标方法使用,但禁止目标方法对提供的数组数据进行修改,以保证数据的安全。而在目标方法对数组数据进行操作的时候,总是要进行遍历的,比如能修改索引位置。)

无之无 | 园豆:5095 (大侠五级) | 2012-05-17 08:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册