返回信息流char a[]="nice day";
char* const pc=a;
//pc="hello world";//cannot change the pc pointer address
a[0]='w';
cout<<pc<<endl;//"wice day" will be print
}
but I found segmentation fault will be caused if coding as
char* const pc="hello hell";
//pc="hello world";//cannot change the pc pointer address
*pc='w';
cout<<pc<<endl;//segmentation fault
}
为什么 *pc='w'; 这样有问题呢
这是一条镜像帖。来源:北邮人论坛 / cpp / #72563同步于 2013/7/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
char * const
beer
2013/7/11镜像同步34 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
编译器把普通字符串当作“array of n const char”。所以通过pc修改常量const char会出现segment fault。
char a[] = "nice day" 用普通字符串初始化一个数组,是给变量初始化,所以没有错误。
个人理解,如有错误求高人指正
pc指向的地址是常量,那指向的地址在哪?你改成这样试试吧~~char a[] = "hello hell";char* const pc = a;*pc='w';
这样肯定可以
问的是
char* const pc ="hello hell";
*pc='w';
这样有什么问题呢
【 在 Joevy 的大作中提到: 】
: pc指向的地址是常量,那指向的地址在哪?你改成这样试试吧~~char a[] = "hello hell";char* const pc = a;*pc='w';
pc指向的地址在readonly section,不能写
【 在 beer 的大作中提到: 】
: 这样肯定可以
: 问的是
: char* const pc ="hello hell";
: ...................
【 在 beer 的大作中提到: 】
: 这样肯定可以
: 问的是
: char* const pc ="hello hell";
: ...................
因为你试图改变pc的地址值了。
原来的pc指向的是字符串“hello hell”在内存中的地址,
而在你试图将pc指向‘w’的时候就意味这你试图改变一个const修饰的地址常量的值了。
而没有出错的那种情况是因为 pc 指向的是一个char[],改变char[0]的内容,但是char数组的地址并不会改变。可以理解为pc是一个指向指针的指针。
我觉得是因为pc指向的是字符串常量 不能被修改啊~ 跟const无关
char* const pc只是说你的pc是一个常量类型的指针,不能修改这个指针的指向。也就是说这个const只是限定了你的这个指针*pc的指向是不能被修改的。
板凳里的能行是因为pc指向的是一个数组,数组内容可以改变。
你3楼里说的不行是因为pc指向的是字符串常量,不能被修改,你又试图修改。
欢迎指正 =、=
另外 要区分“指针常量”和“常量指针”
char * const pc是指针常量,它限定了“不能修改这个指针的指向”
const char *pc是常量指针,它限定了“不能通过指针来修改这个指针指向的值”
说完了 =、=