[英]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數組一起使用?
您在這里有一些錯誤:
您返回一個指向局部變量的指針。 函數返回后,先前由該變量占用的堆棧區域不再存在,或由下一個函數使用。
當您具有二維數組時,您將返回一個指向整數的指針。 最接近的將是指針到指針。
您可以訪問事物單指針,就好像它是雙指針一樣(指針到指針或指針到數組或數組或數組),但事實並非如此。 這就是您在指向的行出現錯誤的原因。
但是您不能使用指針指向指針,因為數組數組(二維數組)的內存布局與指針指向指針不同。 有關原因的解釋,請參見例如我的舊答案 。
通過在堆上動態創建數組作為指針到指針,可以最輕松地解決此問題:
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.