//创建一个4*3的二维数组
int **p1 = new int*[4];
int (*p2)[3] = new int[4][3];
for(int i = 0; i < 4; ++i)
{
p1[i] = new int[3];
}
//初始化
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 3; ++j)
{
p1[i][j] = i; //行号
p2[i][j] = i;
}
}
//打印二维数组结果
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 3; ++j)
{
cout << p1[i][j] << " ";
}
cout << endl;
}
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 3; ++j)
{
cout << p2[i][j] << " ";
}
cout << endl;
}
printf("p1 = %p, p1++ = %p\r\n", &p1[0], &p1[1]);
printf("p2 = %p, p2++ = %p\r\n", &p2[0], &p2[1]);
运行结果1:
printf("p1 = %p, p1++ = %p\r\n", p1[0], p1[1]);
printf("p2 = %p, p2++ = %p\r\n", p2[0], p2[1]);
运行结果2:
printf("p1 = %p, p1++ = %p\r\n", &p1[0], &p1[1]);
printf("p2 = %p, p2++ = %p\r\n", &p2[0], &p2[1]);
1:p1与p2都能用 [][],下标来访问二维数组里面对应的值,但是本质是不一样的。
2:p1++是移动(int*指针)4,p2++是移动 列数*元素类型
p1和p2。都代表二维数组,但是p1的行地址不是连续分配的,但是p2的行地址是连续的分配的。