二维数组的创建
方法①:直接申请一块空间
#include <iostream>
using namespace std;
int main()
{
//申请空间
int(*p)[4] = nullptr;
p = new int[3][4]; //直接申请一块3*4个字节的堆空间,用于存放数组元素,并将其起始地址赋给数组指针p。
//赋值
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++) {
p[i][j] = (i + 1) * (j + 1);
//*(*(p + i) + j) = (i + 1) * (j + 1);
}
//打印
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
cout << p[i][j] << ' ';
cout << endl;
}
//释放空间
delete []p;
}
运行结果
1 2 3 4
2 4 6 8
3 6 9 12
内存排布
方法②
#include <iostream>
using namespace std;
int main()
{
//申请空间
int** pp = nullptr;
pp = new int*[3]; //先申请一块4*3(3代表数组第一维的长度)个字节的堆空间,用于存放二维数组中每单行数组的起始地址,并将这一块用于存放地址的堆空间的首地址赋给二级指针pp。
for (int i = 0; i < 3; i++)
pp[i] = new int[4]; //通过3(数组第一维的长度)次循环,每次申请4*4(数组的第二维的长度)个字节的空间,并将其地址存放至刚刚申请的指针数组中。
//*(pp + i) = new int[4];
//赋值
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++) {
pp[i][j] = (i + 1) * (j + 1);
//*(*(pp + i) + j) = (i + 1) * (j + 1);
}
//打印
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
cout << pp[i][j] << ' ';
cout << endl;
}
//释放空间
for (int i = 0; i < 3; i++)
delete[]pp[i];
delete[]pp;
为方便理解,二级指针pp如下所示:
版权声明:本文为weixin_46085113原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。