[英]Cast an array to pointer in function return
我在C ++中遇到有關指針的問題。 代碼是:
int * initArray() {
int a [2];
a[0] = 1;
a[1] = 2;
return a;
}
int main () {
int * b = initArray();
cout << b << "---" << *(b) << endl;
cout << b + 1<< "---" << *(b + 1) << endl;
}
輸出是
0021FC20---1
0021FC24---1431629120
您可以看到該值是錯誤的。
當我嘗試將init
數組代碼放入主函數中時,它可以正常運行。
您能告訴我代碼中的錯誤嗎?
initArray
返回的是函數返回后不再存在的本地數組的地址。 這是未定義的行為。
為了使變量a
持久的,即使該函數返回,您可以:
static
解決方案,以實現您要嘗試的是:
int * initArray() {
int* a = new int[2];
a[0] = 1;
a[1] = 2;
return a;
}
由於內存是手動分配的,因此它將持久存在並且構造應該有效。 是的,在您的情況下,內存是自動分配的,並在函數結束時刪除,從而導致行為未定義。
a是局部於initArray方法的。 方法返回后,a不再有效,因此initArray返回的指針不再有效。
您需要改為在main方法中分配數組,然后將一個指針傳遞給initArray方法:
void initArray(int *a) {
a[0] = 1;
a[1] = 2;
}
int main () {
int b[2];
initArray(b);
cout << b << "---" << *(b) << endl;
cout << b + 1<< "---" << *(b + 1) << endl;
}
您的數組int a[2]
是一個局部數組,該數組在函數存在時被釋放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.