簡體   English   中英

將數組強制轉換為函數返回中的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM