我有這樣一些代碼:陣列地址
int n;
cin >> n;
int array[n];
for (int i = 0; i < n; ++i) {
cin >> array[i];
}
int tmp[n - 1];
tmp[0] = 1;
隨着輸入:1 10
我發現的array[0]
值被改變,而不是10
它具有與tmp[0]
相同。
然後我意識到輸入的長度爲tmp[]
變成零。所以,我打印的array[]
和tmp[]
與地址:
printf("%d\n %d\n", array, tmp);
,發現他們有相同的地址。
我想弄清楚如果一個數組的長度爲0會發生什麼;所以我想這:
int array[1];
array[0] = 10;
int tmp[0];
tmp[0] = 1;
地址:
array[]: 1363909056
tmp[] : 1363909052
它看起來就像以前的代碼(除輸入部分)。但是tmp[0]
和array[0]
現在有不同的值和地址。
我真的很困惑tmp
有更小的地址,然後array
。
所以我的問題是:
- 如果我聲明長度爲零的數組,會發生什麼?
- 爲什麼這兩個代碼的工作原理不同? (他們看起來一樣:) :)
'int array [n];'不是標準的C++。 –
我試了很多不同的'聲明',但它只是使更多的困惑 – mzhty
'tmp [0] = 1;'只是調用未定義的行爲。其後,從'tmp [0]'中訪問結果並不值得考慮。 –