二维数组定义以和动态分配空间

二维数组定义以和动态分配空间

ID:21376996

大小:31.00 KB

页数:3页

时间:2018-10-21

二维数组定义以和动态分配空间_第1页
二维数组定义以和动态分配空间_第2页
二维数组定义以和动态分配空间_第3页
资源描述:

《二维数组定义以和动态分配空间》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、二维数组定义以及动态分配空间(转)下面三种定义形式怎么理解?怎么动态分配空间?(1)、int**Ptr;(2)、int*Ptr[5];我更喜欢写成int*Prt[5];(3)、int(*Ptr)[5];此文引自网上,出处不详,但是觉得非常好。略改了一点。多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。闲话少说,这里我就以三个二维数组的比较来展开讨论:    (1)、int**Ptr;   (2)、int*Ptr[5];我更喜欢写成int*Prt[5];    (3)、int(*Ptr)[5];    以上三例

2、都是整数的二维数组,都可以用形如Ptr[1][1]的方式访问其内容;但它们的差别却是很大的。下面我从四个方面对它们进行讨论:    一、内容:       它们本身都是指针,它们的最终内容都是整数。注意我这里说的是最终内容,而不是中间内容,比如你写Ptr[0],对于三者来说,其内容都是一个整数指针,即int*;Ptr[1][1  ]这样的形式才是其最终内容。    二、意义:       (1)、int**Ptr表示指向"一群"指向整数的指针的指针。       (2)、int*Ptr[5]表示指向5个指向整数的指针的指针,

3、或者说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个字节的内存空间。    四、用法:       (1)、int**Ptr       因为是指针的指针,需要两次内存分配才能使用其最终内容。

4、首先,Ptr=(int**)newint*[5];这样分配好了以后,它和(2)的意义相同了;然后要分别对5个指针进行内存分配,例如:  Ptr[0]=newint[20];  它表示为第0个指针分配20个整数,分配好以后,Ptr[0]为指向20个整数的数组。这时可以使用下标用法Ptr[0][0]到Ptr[0][19]了。      如果没有第一次内存分配,该Ptr是个"野"指针,是不能使用的,如果没有第二次内存分配,则Ptr[0]等也是个"野"指针,也是不能用的。当然,用它指向某个已经定义的地址则是允许的,那是另外的用法(类

5、似于"借鸡生蛋"的做法),这里不作讨论(下同)。例子:C语言://动态分配二维数组空间{  m_iHight=10;//二维数组的高度m_i;//二维数组的宽度//动态分配一个二维数组m_ppTable内存空间//其类型为int  //m_ppTable指向该数组  int**m_ppTable;  m_ppTable=newint*[m_iHight];//动态分配m_iHight个类型为int*的内存空间//分配的是行地址空间  for(inti=0;i           m_ppTable[i]=newint[m_i

6、Width];  //动态分配m_iWidth个类型为int的内存空间//分配的是某行的数值空间}//由此分配的二维数组空间并非是连续的//可以使用m_ppTable[row][col]来给该二维数组赋值//其中0<=row//释放所分配的内存空间{   for(inti=0;i      delete[m_iWidth]m_ppTable[i];//以行为单位释放数值空间   delete[m_iHight]m_ppTable;     //释放行地址空间}int**a;a=(int**)calloc(sizeof(int

7、*),n);for(i=0;i  a[i]=(int*)calloc(sizeof(int),n);这样就可以了使用的时候就和普通的二维数组一样最后用for(i=0;i  cfree(a[i]);cfree(a);释放内存就可以了      (2)、int*Ptr[5]      这样定义的话,编译器已经为它分配了5个指针的空间,这相当于(1)中的第一次内存分配。根据对(1)的讨论可知,显然要对其进行一次内存分配的。否则就是"野"指针。      (3)、int(*Ptr)[5]      这种定义我觉得很费解,不是不懂,而

8、是觉得理解起来特别吃力,也许是我不太习惯这样的定义吧。怎么描述它呢?它的意义是"一群"指针,每个指针都是指向一个5个整数的数组。如果想分配k个指针,这样写:Ptr=(int(*)[5])newint[5*k]。这是一次性的内存分配。分配好以后,Ptr指向一片连续的地址空间,其中Ptr[0]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。