C++ 二维数组 在连续的空间中分配二维数组

在C++11中,定义二维数组的有四种方法,两种固定分配的二维数组和两种动态分配的二维数组。在这里顺便提一下new int[]和new int[]()的区别,在VS中,前一种只分配内存空间,不做初始化,后一种分配空间并同时将元素初始化为0;使用MinGW编译时,都会初始化为0;

一、固定分配二维数组有两种方式

1、第一种,常量


const int M = 100;
const int N = 200;
int arr[M][N];

2、第二种,宏定义


#define M 100
#define N 200
    
int arr[M][N];

二、动态分配二维数组有两种方式

1、第一种,二维数组内的空间不连续


int M = 100;
int N = 200;
int **arr = new int*[M];
for(int i=0;i<M;i++)
    arr[i] = new int[N];

释放数组内存代码:


for(int i=0;i<M;i++)
    delete[] arr[i];
delete[] arr;
arr = nullptr;

2、第二种,二维数组存放在一组连续空间内


int M = 100;
int N = 200;
int **arr = new int*[M];
int *buffer = new int[M*N];
for(int i=0;i<M;i++)
    arr[i] = buffer+i*N;

在上面的代码中,arr是一二维数组指针,buffer才是实际存放数据的内存。arr[i]实际上是一个int*类型的指针,是一个地址,指向buffer中的某一段内存的起始地址A,从起始地址A开始共N个元素,就相当于arr中的第i行的N个元素。

释放数组内存代码:


delete []buffer;
buffer = nullptr;
delete []arr;
arr = nullptr;

猜你喜欢

转载自blog.csdn.net/dumpdoctorwang/article/details/80902947