char i;
for(i=0;i<16;i++)
printf("%c","asdf"[i]);
i=1;
if("123"[i]==1)
i=1;
if("456"[4]==1)
i=1;
if("789"[1]==1)
i=1;
輸出爲訪問字符:來自未在一個變量(C)聲明爲「串」
asdf 123 456
看似大部分「串」的是後在存儲器中彼此直接。我不認爲這是隨機的,還是它? 此外,當我在char-access-expression中使用int變量而不是i時,程序失敗,這不是第一個(這裏是asdf [i])。例如如果(「123」[j] == 1)
有人可以向我解釋嗎?
編譯器通常會將所有常量字符串收集到「字符串表」中。這樣做可能會去除重複的字符串;例如:「hello \ 0」和「lo \ 0」最終可能會在字符串表中摺疊。 – ninjalj 2012-04-12 19:54:37
但是爲什麼「789」不在這張桌子上呢?這取決於訪問索引,或者它看起來如此? – user1329846 2012-04-14 05:44:31
@ user1329846:可能是編譯器在編譯時計算了「」789「[1]」,但對於「456」[4]'沒有這樣做。內存中字符串的位置不是由C標準定義的,所以在這裏沒有任何保證,這就是爲什麼你應該避免你想要做的事情。 – 2012-04-14 12:55:39