用双指针创建的C++二维数组

C++ 2d array created by double pointer

本文关键字:C++ 二维数组 创建 指针      更新时间:2023-10-16

我想用指针创建2d数组,然后显示。我用递增指针(one*)更改行,用索引更改列。我的代码:

int ** tabl=new int *[4];
for (int i=0;i<10;i++)
    tabl[i]=new int [3];
int **ptab=tabl;//save first position of array
for (int i=0;i<4;i++)
{
    for (int j=0;j<3;j++)
    {
        *tabl[j]=rand()%10 +1;
        printf("%4d",*tabl[j]);
    }
    tabl++;
}
tabl=ptab;
cout<<endl<<endl<<endl;
for (int i=0;i<4;i++)
{
    for (int j=0;j<3;j++)
    {
        printf("%4d",*tabl[j]);
    }
    tabl++;
}

输出:

   2   8   5   1  10   5   9   9   3   5   6   6
   2   1   9   1   9   5   9   5   6   5   6   6

但第二个循环中的一些数字与原始数字不同。为什么?

问题在于引用元素的方式。它应该是(*tabl)[j],而不是*tabl[j]

还要注意,您在此处超出了分配的内存:

int ** tabl=new int *[4];
for (int i=0;i<10;i++)
               ^
    -----------+