我正在尝试使用双指针实现二维数组。我试图实现的方法是根据其物理表示对其进行可视化。例如,考虑一个 2 x 2 矩阵,它的物理表示是
c1 c2
R1 -> A00 A01
R2 -> A10 A11
Step 1:创建指向第一行的双指针
Step 2:创建指向 c1 地址的一级指针
Step 3:用户输入
Step 4:创建指向 c2 地址的一级指针
Step 5:用户输入
第 6 步:将 Row 指针递增到点 R2
第 7 步:从第 2 步到第 5 步重复
下面是我实现的代码的代码片段:
int _tmain(int argc, _TCHAR* argv[])
{
int **p,***temp;
p = (int **)malloc(nRows*sizeof(int *));
//Allocating memory for two rows, now p points to R1
temp = &p; //storing the address of p to restore it after storing the values
for(int i=0;i<nRows;i++)
{
for(int j=0;j<nCols;j++)
{
*(p+j) = (int *)malloc(sizeof(int));
//Allocating memory for col , now *p points to C1
scanf("%d",*(p+j));
}
p += 1; // NOw p is pointing to R2
}
p = *temp; // restoring the base address in p;
for(int i=0;i<nRows;i++)
{
for(int j=0;j<nCols;j++)
printf("%d",*(p+j));
// In first iteration print values in R1 and R2 in second iteration
p += 1; // points to the next row
}
getch();
return 0;
}
scanf 似乎工作正常。但是在 printf 我得到不稳定的结果。它开始指向其他位置
你能告诉我如何按照我之前所说的方式实现这个二维数组吗?我做这个练习是为了实验目的,只是为了深入了解双指针的工作原理。