[問題] 書上有句說明覺得怪怪的

看板C_and_CPP作者 (ya)時間15年前 (2010/05/01 12:58), 編輯推噓1(1014)
留言15則, 4人參與, 最新討論串1/2 (看更多)
在螞蟻書第8章關於字串的說明,怎麼看怎麼怪 字串是字元的陣列 字串是指向此字串第一個字元的指標 字串的值是它的第一個字元的位址 所謂的第二句的"字串"與第三句的 "字串的值" 指的就是 "字元陣列的名稱" 吧? 因為假如用 char x1[]= "abcd"; 那麼 abcd <== 字串 應該不等於 a 的位置 而是 x1 <==字元陣列的名稱 等於 a 的位置 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.180.102

05/01 13:39, , 1F
第二句跟第三句是一體兩面
05/01 13:39, 1F

05/01 14:04, , 2F
x1 裡放的是一份副本。"abcd" 本身佔另一個位址。
05/01 14:04, 2F

05/01 14:44, , 3F
樓上的講法只適用於char *x1="abcd";吧?
05/01 14:44, 3F

05/01 23:09, , 4F
字串值,應該是因為通常對字串的定義是,結尾要帶\0的字元
05/01 23:09, 4F

05/02 02:33, , 5F
3F 講反了吧,char x1[] 可是配置在 stack 上的空間。
05/02 02:33, 5F

05/02 02:33, , 6F
"abcd" 位在常數池,那行設初值的動作相當於 memcpy()。
05/02 02:33, 6F

05/02 02:33, , 7F
把 "abcd" 從常數池複製到 stack 上。
05/02 02:33, 7F

05/02 02:34, , 8F
char *x1 = "abcd"; 應該寫成 const char *x1 = "abcd";
05/02 02:34, 8F

05/02 02:34, , 9F
這樣是 x1 指到常數池的 "abcd" 位址起點。
05/02 02:34, 9F

05/02 11:06, , 10F
忘了考慮那個const了:p
05/02 11:06, 10F

05/02 11:13, , 11F
剛剛研究了一下,似乎是這樣...
05/02 11:13, 11F

05/02 11:14, , 12F
"abcd"本身也占用一塊記憶體
05/02 11:14, 12F

05/02 11:17, , 13F
如果是char x1[]={'a','b','c','d','\0'};
05/02 11:17, 13F

05/02 11:18, , 14F
可能就沒有在常數池中了...
05/02 11:18, 14F

05/02 11:19, , 15F
(以前沒有仔細研究兩者的差別...)
05/02 11:19, 15F
文章代碼(AID): #1BsxK93x (C_and_CPP)
文章代碼(AID): #1BsxK93x (C_and_CPP)