簡體   English   中英

C ++指針和2d數組輸出

[英]C++ Pointer and 2d array outputting

我是C ++的新手,仍然對2d數組如何與指針一起使用感到困惑。 如果我有這個(以示例格式):

int* anarray = anarrayfiller();
for (int a=0;a<10;a++) {
    for (int b=0;b<10;b++) {
         cout<<(char)anarray[a][b]; //Here's the error mentioned below
    }
    cout<<"\n";
}
//Later, outside main
int* anarrayfiller() {
    int anarray[10][10];
    //Populated here
    return &anarray;
}

這會在cout <<行中的b下產生一個錯誤:“表達式必須具有指向對象的指針類型”我只想檢查一下如何搜索2d數組,然后發現: 一個指向2d數組的指針,這實際上表明指針指向anarray [0]內的int數組,如果是這種情況,就返回指針而言,我肯定會丟失一些東西-然后我就不必將指針返回至每個指向的二維指針數組了來自anarray的特定int? 我在這里很困惑。 指針如何與2D數組一起使用?

您在這里有一些錯誤:

  1. 您返回一個指向局部變量的指針。 函數返回后,先前由該變量占用的堆棧區域不再存在,或由下一個函數使用。

  2. 當您具有二維數組時,您將返回一個指向整數的指針。 最接近的將是指針到指針。

  3. 您可以訪問事物單指針,就好像它是雙指針一樣(指針到指針或指針到數組或數組或數組),但事實並非如此。 這就是您在指向的行出現錯誤的原因。

  4. 但是您不能使用指針指向指針,因為數組數組(二維數組)的內存布局與指針指向指針不同。 有關原因的解釋,請參見例如我的舊答案

通過在堆上動態創建數組作為指針到指針,可以最輕松地解決此問題:

int **anarrayfiller()
{
    int **anarray = malloc(sizeof(int *) * 10);

    for (int i = 0; i < 10; ++i)
    {
        anarray[i] = malloc(sizeof(int) * 10);

        /* Populate here */
    }

    return anarray;
}

當您將問題標記為C ++時,實際上應該避免使用純數組或指針,而推薦使用std::vector (如果需要動態添加)或std::array (如果您具有固定的編譯時大小):

std::array<std::array<int, 10>, 10> anarrayfiller()
{
    std::array<std::array<int, 10>, 10> anarray;

    // Populate arrays

    return anarray;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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