//创建一个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的行地址是连续的分配的。
这篇博客探讨了C++中动态创建二维数组的两种方式,通过指针p1和p2实现。文中详细展示了如何初始化和打印二维数组,并分析了两者内存分配的区别:p1的行地址不连续,而p2的行地址连续。同时,通过输出指针地址展示了p1++和p2++操作的区别,前者移动4个单位,后者移动3个元素大小的单位。
3501

被折叠的 条评论
为什么被折叠?



