2013-05-31 53 views
1

指針的值,我有這樣的代碼:未料位於C

int *x[2]; 
int var0 = 10; 
int var1 = 20; 
int var2 = 30; 
x[0] = &var0; 
x[1] = &var1; 
x[2] = &var2; 

cout << "var0 is equal to: " << *x[0] << endl; 

var0 is equal to: 32767 

我很期待:

  • 我初始化指針數組3項
  • 將一些值分配給3個變量
  • Ass這個變量的指定地址指針數組項目
  • 現在我期待:*x[0] = 10, *x[1] = 20, *x[2] = 30,但你可以從例子*x[0] == 32767看到。爲什麼?
+10

'X [2]'不存在;你剛剛通過寫入**來調用**未定義的行爲**。 –

+0

@OliCharlesworth:它最有可能存在,雖然只是作爲分配給程序堆棧的內存形式的佛陀轉世:) – 2013-05-31 21:21:46

回答

5
int *x[2]; 

宣佈的2個指針數組。這個數組的有效索引是[0..1]。該行

x[2] = &var2; 

超出數組末尾寫入。這具有未定義的後果,但聽起來像&var0 == x[2],因此您將覆蓋var0,將其設置爲var2的地址。

如果要分配3個指針值,則需要具有三個元素的陣列 - int *x[3];

2

您已經創建了2個元素的數組,但你寫3個元素 - 這不會幫助您的問題