指向数组的指针的c++指针

C++ pointer of pointers to arrays

本文关键字:指针 c++ 数组      更新时间:2023-10-16

我有一点问题与创建数组的数组,或数组指针的数组更精确,我似乎已经消除了所有的错误,因为程序编译只是很好(我使用g++)然而,当我试图运行它它给出了一个"核心转储"消息。

这是我的代码?

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void create_array(int **pp)
    {
        pp = new int*[4];
        for (int i = 0; i<4; i++)
        {
            pp[i] = new int[4];
        }
    }
int main()
    {
        srand(time(NULL));
        int **pp;
        create_array(pp);
        for (int x = 0; x<4; x++)
        {
            for(int y = 0; y<4; y++)
            {
                pp[x][y] = rand()%9;
            }
        }
        cout << pp[3][2] << endl;
        return 0;
    }
 void create_array(int **pp)
{
    pp = new int*[4];
    for (int i = 0; i<4; i++)
    {
        pp[i] = new int[4];
    }
}

pp是指向int的指针数组,但是它是按值传递的。因此main中的原调用方pp不受影响。调用create_array函数后,main中的pp仍然是uninitialized。当你给它赋值的时候。这将导致核心转储。

尝试在c++中使用vector <vector<int>>

或尝试:

void create_array(int **&pp)
{                     //^^
    pp = new int*[4];
    for (int i = 0; i<4; i++)
    {
        pp[i] = new int[4];
    }
}

有了上面的改变,如果你试图在我的机器上打印整个矩阵,它输出如下:

 8 7 6 3
 3 5 6 4
 3 8 7 6
 0 0 5 8

如果您不想初始化指针,请使用引用。