C++ 指针二维数组, C++二维指针数组笔记

时间:2023-12-16 10:59:32

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 ;
}

C++ 指针二维数组, C++二维指针数组笔记

二、两维都不知道

#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 ;
}

C++ 指针二维数组, C++二维指针数组笔记

三、已知第二维

C++ 指针二维数组, C++二维指针数组笔记

四、 已知第一维, 一次分配内存(保证内存连续性)

C++ 指针二维数组, C++二维指针数组笔记

五、 两维都未知, 一次分配内存(保证内存的连续性)

C++ 指针二维数组, C++二维指针数组笔记

    多说一句:new和delete要注意配对使用,即有多少个new就有多少个delete,这样才可以避免内存泄漏!