C++定义动态数组.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C定义动态数组

C++定义动态数组 首先:为什么需要动态定义数组呢? ? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出 ? 但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过? ? ? 如: int Array[5];正确 ?????? int i=5; ?????? int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少 ?? 那么,我们该如何解决定义长度未知的数组呢? ?? 答案是:new 动态定义数组? ?? 因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间 ??? ?? 这样,下面的语句: ??? int size=50; ??? int *p=new int[size]; 是正确的 ? ?? 但是二维动态数组能不能也这样定义呢 ??? ? int size=50,Column=50; ? int (*p)[Column]=new int [size][Column] ? 这样的语句,编译器通不过,为什么呢? ? 首先 new int[size][Column] 就是动态生成时确定的,所以它没有错 ? 那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。 ? 改成这样: ? int size=50 ? int (*p)[50]=new int [size][50] ? 便正确了。 ?? 由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。 ?? 但是如何真正的动态分配二维数组呢,即如果Column 也不能预先知道的话,该如何处理呢? ??? ?? 上面的动态分配已经不能满足我们的要求,因为上面动态分配只对一维数组是真正动态的,对二维数组的话,必须编译之前预先知道二维数组每一列的长度,而这个长度在很多情况下是不能预先知道的,所以我们得结合其他方法来解决这个问题。 ??? ?? 既然一维是真正的动态分配的话,那我们利用这一特性定义一个指针数组。 ??? ?? int **p= new int*[size];//定义指针数组? ?? int *p[5];//? 假若知道二维数组的行数为5 ?? 然后对指针数组中的每一个指针分配一个一维数组空间,这样便动态定义了二维数组 ?? ?? 事实上,我认为指针数组的主要用途,就在于动态定义多维数组 ???? ??? for(int i=0;isize;i++) ?? { ???? p[i]=new int[Column]; ?? } ??? ?? 运行完毕后,一个二维数组便被动态的成功建立 ----------------------------------- ? 例子: ? ?? size =6; ? ?? column =5 ? ?? int **p=new int*[size]; ? ??? for(int i=0;isize;i++) ?? { ???? p[i]=new int[Column]; ?? } ? ? ? 所生成的动态数组如下图所示: ? ? ? ??? ? 最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉 ? ? 下面是delete方法: ??? for(int i=0;isize;i++) ?? { ???????????delete []??p[i];?? // 要在指针前加[]?, 否则的话 只释放p[i]所指的第一个单元所占的空间 ?? } ? ?? delete [] p;???? //最后不要忘掉 释放掉开辟的指针数组? :》

文档评论(0)

liangyuehong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档