C++中二维数组的动态分配

来源:互联网 发布:官网pkpm软件多少钱 编辑:程序博客网 时间:2024/05/19 11:19

百度上一篇文章,对动态数组作了比较详细的分析,我对它进行了初步的整理:

 

二维数组定义以及动态分配空间  
以三个二维数组的比较来展开讨论:
(1)、int **Ptr;
(2)、int *Ptr[ 5 ]; 
(3)、int (*Ptr)[5];
以上三例都是整数的二维数组,但它们的差别却是很大的。 
一、意义:
(1)、int **Ptr          表示指向"一群"指向整数的指针的指针。
(2)、int *Ptr[ 5 ]      表示指向 5 个指向整数的指针的指针,或者说Ptr有5个指向"一群"整数的指针,Ptr是这5个指针构成的数组的地址
(3)、int ( *Ptr )[ 5 ] 表示指向"一群"指向 5 个整数数组的指针的指针。
二、所占空间:
(1)、int **Ptr 和 (3)、int ( *Ptr )[ 5 ] 一样,在32位平台里,都是4字节,即一个指针。
但 (2)、int *Ptr[ 5 ] 不同,它是 5 个指针,它占5 * 4 = 20 个字节的内存空间。

可以这样理解它们:
int ** Ptr <==> int Ptr[ x ][ y ];
int *Ptr[ 5 ] <==> int Ptr[ 5 ][ x ];
int ( *Ptr )[ 5 ] <==> int Ptr[ x ][ 5 ];
这里 x 和 y 是表示若干的意思。

 

(注:原文网址:http://wenku.baidu.com/view/f5671b69af1ffc4ffe47ac64.html

 

 

 

C++中一维数组的动态分配十分常用,但C++初学者可能很少想过要使用动态分配的二维数组,或者自认为二维数组就是这样分配的

(至少我自己开始的时候就这样认为):

int m=2, n=3; int** array2D=new int[m][n];

这完全是我们写多了像int n=4; int* array=new int[n];的想当然的想法。

下面是我用c++写的定长和不定长动态二维数组的简单实现,经过了初步测试。欢迎CSDN的朋友们就此问题提出你的意见和看法。

 

 

 

 

 

测试:

 

原创粉丝点击