📅  最后修改于: 2023-12-03 15:13:44.668000             🧑  作者: Mango
在C/C++中,多维数组在内存中是连续存放的一片区域,因此可以用指针来访问数组中的元素。而多维指针则是指向多维数组的指针变量,可以用来遍历和处理多维数组。
在声明多维指针时,需要指定每一维的大小,例如声明一个int类型的二维指针:
int **p = new int*[3]; // 3行
for(int i = 0; i < 3; i++){
p[i] = new int[5]; // 每行5列
}
这里p是一个指向指针的指针,也可以使用数组名的形式表示:
int *(*p)[5] = new int*[3][5]; // 3行5列
多维指针的初始化需要分别对每一行进行赋值操作:
for(int i = 0; i < 3; i++){
for(int j = 0; j < 5; j++){
p[i][j] = i * 5 + j; // 按行遍历
}
}
和多维数组类似,可以使用双重循环来遍历多维指针:
for(int i = 0; i < 3; i++){
for(int j = 0; j < 5; j++){
cout << p[i][j] << " ";
}
cout << endl;
}
也可以使用一维指针来遍历整个数组:
int *q = &p[0][0];
for(int i = 0; i < 15; i++){
cout << q[i] << " ";
}
和动态分配一维指针内存一样,需要使用delete[]来释放多维指针的内存:
for(int i = 0; i < 3; i++){
delete[] p[i];
}
delete[] p;
使用多维指针可以方便地处理多维数组,但要注意内存的申请和释放。当数组的维数过多时,建议使用结构体来表示更加清晰明了。