2012-11-03 169 views
-2

在C中,爲什麼下面的結果是x [1]是2?默認C變量初始化

int a = 2, x; 
... 
printf("x[1] = ", &x[1]) 
+0

需要更多的上下文/信息。 printf在字符串中沒有格式規範,所以我不知道你是如何讓ax [1]爲2,並且你正在取一個數組中元素的地址,而不是得到x [1]的值, 。你能提供更多信息嗎? – Glenn

回答

1

它沒有。它導致未定義的行爲,其中任何東西都可能發生。您無法以定義的方式訪問超出數組末尾的元素。

什麼是最有可能發生的是,a是棧,從而導致具有相同地址ax[1]上只是「上面」 x,但它絕不是一種保障。

這當然,假設您的printf是一個錯字。就目前而言,它甚至沒有編譯。我是假設這是一個錯字,因爲問題標題只是詢問x[1]的值而不是輸出。

爲了得到它的工作,你必須使用類似:

printf ("x[1] = %d\n", (&x)[1]); 

這也我的系統上打印2,但可以做一些完全不同的其他地方。

+1

在那個例子中,它會給出錯誤「下標值既不是數組也不是指針」。因爲x是一個int。 – dreamcrash

+1

@dreamcrash:正確。我添加了額外的細節以涵蓋最有可能被問到的內容。 – paxdiablo