2.13 以下的初始化有什么区别?char a[] = "string
literal"; char *p = "string
literal"; 当我向 p[i] 赋值的时候, 我的
程序崩溃了。
字符串常量有两种稍有区别的用法。用作数组初始值 (如同在 char a[]
的声明中), 它指明该数组中字符的初始值。其它情况下, 它会转化为一个
无名的静态字符数组, 可能会存储在只读内存中, 这就是造成它不一定能被修改。
在表达式环境中, 数组通常被立即转化为一个指针
(参见第 6 章), 因此第二个声明把 p 初始化成
指向无名数组的第一个元素。
为了编译旧代码, 有的编译器有一个控制字符串是否可写的开关。
参见问题 1.11、 6.1、 6.2 和 6.6。
参考资料: [K&R2, Sec. 5.5 p. 104];
[ISO, Sec. 6.1.4, Sec. 6.5.7];
[Rationale, Sec. 3.1.4]; [H&S, Sec. 2.7.4 pp. 31-2]。
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)