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)