#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int** p;
int i, j;
p = (int**)malloc(sizeof(int* [3]));
for (i = 0; i < 3; i++)
{
*(p + i) = (int*)malloc(sizeof(int[3]));
for (j = 0; j < 3; j++)
{
*(*(p + i) + j) = i + j;
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d\t", *(*(p + i) + j));
}
printf("\n");
}
return 0;
}
对于一个二维数组p[i][j],编译器通过公式*(*(p+i)+j)求出数组的值,其中,p+i 表示计算行指针; *(p+i)表示具体的行,是个指针,指向该行首元素地址;*(p+i)+j表示到具体元素的地址,*(*(p+i)+j)表示得到具体元素的值。