返回信息流这是stackoverflow上对char * const p和const char *p的比较:
-----------------
The difference is that const char * is a pointer to a const char, while char * const is a constant pointer to a char.
The first, the value being pointed to can't be changed but the pointer can be. The second, the value being pointed at can change but the pointer can't (similar to a reference).
地址:http://stackoverflow.com/questions/890535/what-is-the-difference-between-char-const-and-const-char
-----------------
就是说,const char *p里,p指向的内容是字符串常量,不允许被更改, char * const p里,p是一个常量指针,p的值不允许被修改,但是p指向的的内容可以被修改。
我编写了一个测试程序:
#include <stdio.h>
int main() {
char * const p = "abc";
*p = 'v';
printf("%s\n", p);
return 0;
}
这个程序编译通过,但是运行时Segmentation fault (core dumped),这是为什么呢?求指教~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #81171同步于 2014/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
char * const p问题
wdx01
2014/7/31镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
字符串赋值(“abc”),有两种情况:
1.像楼上所说的,赋值给字符数组的话,就不属于常量;
2.要是像在你的例子里面,赋值给一个指针,“abc”就成了是一个常量,内存分配在常量区相当于占用Const char*内存,
这样,你的语句实际上就变成了一个常量指针指向一个字符串常量,都不允许被改变。
其实从计算机内存管理的角度来说就不应该允许对内存组织形式不熟悉的新手使用形如
char* p = "..."; 或 char[] p = "..."; 的写法。