C++ 二维动态数组
一、 已知第一维
#include <iostream>
using namespace std;
int main(int argc, char const *argv []){
int M = ;
int n = ;
// 声明数组行指针
char * a[M];
for (int i = ; i < M; i++) {
// 声明数组列指针
a[i] = new char[n];
// 列赋值
for (int j = ; j < n; j ++){
a[i][j] = j;
}
}
// 打印值
for (int i = ; i < M; i++){
for (int j = ; j < n; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
// 打印行指针
printf("a[0] : %p\n", a[]);
printf("a[0] : %p\n", *(a+));
// 打印具体位置指针
printf("a[0][0]: %p\n", *(a+)+);
printf("a[0][3]: %p\n", *(a+)+);
// 值的打印方法
printf("a[1][2]: %d\n", *(*(a+)+));
printf("a[1][2]: %d\n", a[][]);
// delete 内存
for (int i = ; i < M; i++){
delete [] a[i];
}
return ;
}
二、两维都不知道
#include <iostream>
using namespace std;
int main(int argc, char const *argv []){
int rowsNum = ;
int columnsNum = ;
// 两维都不知道
char **a;
a = new char * [rowsNum];
for (int i = ; i < rowsNum; i++) {
a[i] = new char [columnsNum];
for (int j = ; j < columnsNum; j++) {
a[i][j] = j;
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("%d\n", sizeof(a));
for (int i = ; i < rowsNum; i++) {
delete [] a[i];
}
delete [] a;
return ;
}
三、已知第二维
四、 已知第一维, 一次分配内存(保证内存连续性)
五、 两维都未知, 一次分配内存(保证内存的连续性)
多说一句:new和delete要注意配对使用,即有多少个new就有多少个delete,这样才可以避免内存泄漏!