c++函数创建一个二维数组并返回一个指向该二维数组的指针

c++ Function creates a 2-d array and returns a pointer to the 2-D array

本文关键字:二维数组 一个 指针 返回 创建 c++ 函数      更新时间:2023-10-16

我是c++新手,正在学习使用指针和数组。我有一个艰难的时间与一段代码,正在编译,似乎正在做它应该做的,除了在主函数的指针的输出似乎是一个内存地址,所以我必须在我调用或返回指针的方式错过了一些东西。(我希望我的术语是正确的)

在main函数中,我创建了一个指针变量并将其初始化为null(教授建议初始化所有变量)

int** ptr1=NULL;

接下来,我设置指针等于我的函数,这将创建数组

ptr1 = makeArray1();

这是我的函数的代码。

int** makeArray1()

{

const int ROW = 2;
const int COL = 3;
int** array1 = new int* [ROW];                          //This creates the first row of cols
for (int i = 0; i < ROW; i++)
    {
        array1[i] = new int[COL];               //loop to create next col of all rows
    }
for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COL; j++)
            {
                cout << endl << "Please enter an integer in the first matrix: ";
                cin >> array1[i][j];
            }
    }
cout << endl;
for (int i = 0; i < ROW;i++)
    {
        for (int j = 0; j < COL; j++)
            {
                cout << setw(4) << array1[i][j];
            }
        cout << endl;
    }
cout << endl << endl << "In array 2 array2 = " << *array1;
return array1;

}

数组似乎很好地填充了我的输入,但是当我在main函数中打印ptr1时,它返回一个内存地址,而不是输入到数组中的数字。

打印指针将打印指针的值。这是一个内存地址。如果你想看到2d数组开头的值,你需要取消对指针的引用。

try declare: int** array1 = new int* [ROW];在函数外,如果可以

ptr1是指针。难怪你会得到一个内存地址,因为指针就是一个内存地址。如果要输出数组的内容,就必须对指针解引用。像这样:

for(int i=0; i < ROW; i++) {
    for(int j=0; j < COL; j++) {
         cout<<ptr1[i][j];
    }
}