动态申请的二维数组不是连续的

avatar
作者
猴君
阅读量:0

在初学阶段,曾学过二维数组的内存空间是连续分布的,参考下图:

后来由于动态申请二维数组的方法不常用(一般都是用vector或者直接定义一个二维数组),所以就一直以为二维数组的内存空间是连续的。但实际上,只有非动态申请的二维数组的内存空间是连续的,动态申请的二维数组是不连续的!

这是因为,动态申请一个二维数组的流程一般是,先 new/malloc 出二维数组的行,然后在一个循环内再分别 new/malloc 出每一列的内容。例如:

int **arr = new int*[3]; // 先new出行 // 再循环new出列中的内容 for(int i = 0; i < 3; i++) {     arr[i] = new int[2]{i, i+1}; }

所以动态申请的二维数组,其行之间是连续的,而列之内也是连续的,但每一个列之间却是不连续的,具体参考下图:

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!