动态分配二维数组23232

动态分配二维数组23232

ID:14807304

大小:41.00 KB

页数:13页

时间:2018-07-30

动态分配二维数组23232_第1页
动态分配二维数组23232_第2页
动态分配二维数组23232_第3页
动态分配二维数组23232_第4页
动态分配二维数组23232_第5页
资源描述:

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

1、动态分配二维数组23232多维数组一向很难,一般都采用一维数组,但是一旦要用到还真是头疼。闲话少说,这里我就以三个二维数组的比较来展开讨论:(1)、int**Ptr;(2)、int*Ptr[5];我更喜欢写成int*Prt[5];(3)、int(*Ptr)[5];以上三例都是整数的二维数组,都可以用形如Ptr[1][1]的方式访问其内容;但它们的差别却是很大的。下面我从四个方面对它们进行讨论:一、内容:它们本身都是指针,它们的最终内容都是整数。注意我这里说的是最终内容,而不是中间内容,比如你写Ptr[0],对于三者来说,其内容都是一个整数指针,

2、即int*;Ptr[1][1]这样的形式才是其最终内容。二、意义:(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个字节的内存空间。四、

3、用法:(1)、int**Ptr因为是指针的指针,需要两次内存分配才能使用其最终内容。首先,Ptr=(int**)newint*[5];这样分配好了以后,它和(2)的意义相同了;然后要分别对5个指针进行内存分配,例如:Ptr[0]=newint[20];它表示为第0个指针分配20个整数,分配好以后,Ptr[0]为指向20个整数的数组。这时可以使用下标用法Ptr[0][0]到Ptr[0][19]了。如果没有第一次内存分配,该Ptr是个"野"指针,是不能使用的,如果没有第二次内存分配,则Ptr[0]等也是个"野"指针,也是不能用的。当然,用它指向某个

4、已经定义的地址则是允许的,那是另外的用法(类似于"借鸡生蛋"的做法),这里不作讨论(下同)。例子: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;im_ppTable[i]=newint[m_iWidth];//

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

6、f(int),n);这样就可以了使用的时候就和普通的二维数组一样最后用for(i=0;icfree(a[i]);cfree(a);释放内存就可以了(2)、int*Ptr[5]这样定义的话,编译器已经为它分配了5个指针的空间,这相当于(1)中的第一次内存分配。根据对(1)的讨论可知,显然要对其进行一次内存分配的。否则就是"野"指针。(3)、int(*Ptr)[5]这种定义我觉得很费解,不是不懂,而是觉得理解起来特别吃力,也许是我不太习惯这样的定义吧。怎么描述它呢?它的意义是"一群"指针,每个指针都是指向一个5个整数的数组。如果想分配k个指针,这样

7、写:Ptr=(int(*)[5])newint[5*k]。这是一次性的内存分配。分配好以后,Ptr指向一片连续的地址空间,其中Ptr[0]指向第0个5个整数数组的首地址,Ptr[1]指向第1个5个整数数组的首地址。综上所述,我觉得可以这样理解它们:int**Ptr<==>intPtr[x][y];int*Ptr[5]<==>intPtr[5][x];int(*Ptr)[5]<==>intPtr[x][5];这里x和y是表示若干的意思。_____________________________________________________

8、__________1.C语言动态分配二维数组(1)已知第二维Code-1char(*a)[N];//指向数组的指针a=(char(*)[N])mal

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

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

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