首先我有一個函數來初始化一個數組並返回一個指向它的第一個元素的指針。C++使用指針遍歷數組
int* getPtrToArray()
{
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
return array;
}
而這個函數只是創建一個不會被使用的數組。
void testing()
{
int junk[3] = {1234, 5678, 9101112};
}
這是我的主要功能:
int main()
{
// #1
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int* ptr0 = array;
cout << *ptr0 << endl;
cout << ptr0[0] << endl;
// #2
int* ptr1 = getPtrToArray();
cout << *ptr1 << endl;
cout << ptr1[0] << endl;
// #3
testing();
cout << *ptr1 << endl;
cout << ptr1[0] << endl
}
輸出結果是:
1
1
1
2066418736 // "ptr1[0]" should be the same as "*ptr1", right?
2066418736 // since testing() does not modify the array, why "*ptr1" is changed?
2066418736
我認爲所有這些六個輸出應該是1
(數組中的第一個元素)。任何人都可以向我解釋這個嗎?謝謝!
在getPtrToArray中無法返回數組,因爲它是一個局部變量,並且一旦函數返回,它的地址就無效 – DBug
您應該得到一個警告,例如「當您返回」返回時返回的「與局部變量相關聯的堆棧內存地址」數組編譯。 –