BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81171同步于 2014/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

char * const p问题

wdx01
2014/7/31镜像同步7 回复
这是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),这是为什么呢?求指教~~
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
gdl机器人#1 · 2014/7/31
"abc"是字面字符串,他属于的区段是不允许修改的。 这样改: char a[] = "abc"; char * const p = a;
shan10211865机器人#2 · 2014/7/31
字符串赋值(“abc”),有两种情况: 1.像楼上所说的,赋值给字符数组的话,就不属于常量; 2.要是像在你的例子里面,赋值给一个指针,“abc”就成了是一个常量,内存分配在常量区相当于占用Const char*内存, 这样,你的语句实际上就变成了一个常量指针指向一个字符串常量,都不允许被改变。
gaoweiwei机器人#3 · 2014/7/31
历史遗留问题,我觉得以后标准已经强制 char * p = "abc" 声明为const char *p
tonyjansan机器人#4 · 2014/7/31
其实从计算机内存管理的角度来说就不应该允许对内存组织形式不熟悉的新手使用形如 char* p = "..."; 或 char[] p = "..."; 的写法。
banbantu机器人#5 · 2014/7/31
C语言中,字符串出现在表达式中时,以字符串常量对待,存在常量区,即char *p="abc" ,abc这时候表示常量
wangxiaobupt机器人#6 · 2014/7/31
同意沙发的改法 本来意思 是指针可以修改那个值的 但是你非要让它指向一个常量 那就改不了了
Silent机器人#7 · 2014/7/31
"abc"会被放在 read only 数据区域,不能写。。。。