pre{
line-height:1;
color:#3c3c3c;
background-color:#d2c39b;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#3c3c3c;}
.operator {color:#008000;font-weight:bold;}

首先:为什么需要动态定义数组呢?

  这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出
  但是问题是,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;i<size;i++)
   {
     p[i]=new int[Column];
   }
  
   运行完毕后,一个二维数组便被动态的成功建立
-----------------------------------
 

例子:

 
   size =6;
 
   column =5
 
   int **p=new int*[size];
 
    for(int i=0;i<size;i++)
   {
     p[i]=new int[Column];
   }
 
 

 

最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉

 
  下面是delete方法:
 
 
 
    for(int i=0;i<size;i++)
   {
           delete []  p[i];   // 要在指针前加[] , 否则的话 只释放p[i]所指的第一个单元所占的空间
   }
 
   delete [] p;     //最后不要忘掉 释放掉开辟的指针数组  :》

本文使用 书画小说软件 发布,内容与软件无关,书画小说软件 更惬意的读、更舒心的写、更轻松的发布。

 

动态定义数组 .xml的更多相关文章

  1. Java中的动态定义数组

    1.一维矩阵的动态定义(代码注释) 1.1方法一 package dongtai; import java.util.Scanner; import java.util.ArrayList; publ ...

  2. VBA中如何动态定义数组

    利用 dim Arr()as string这样声明,一旦赋值后,数组大小也就固定了.如果要改变数组大小,要用redim 命令redim arr(10) 加preserve 可以不清空数组,保持原有数据 ...

  3. 不能用c99的情况下,如何动态定义数组的长度

    #include <stdio.h>#include <stdlib.h> int main(int argc, char const *argv[]){    int num ...

  4. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  5. C++ 用变量定义数组

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  6. java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历

    一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...

  7. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...

  8. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  9. C#中定义数组

    C#定义数组 一.一维:int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 int[] numbers = new int[3]{1,2,3};//定长   二 ...

随机推荐

  1. linux驱动模型<输入子系统>

    在linux中提供一种输入子系统的驱动模型,其主要是实现在input.c中. 在输入子系统这套模型中,他把驱动分层分类.首先分为上下两层,上层为input.c .下层为驱动的实现,下层分为两部分,一部 ...

  2. http://my.oschina.net/u/2007041/blog/508520

    http://my.oschina.net/u/2007041/blog/508520

  3. AndroidManifest.xml 配置权限大全

    问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissi ...

  4. 《Linux shell变量总结回顾》RHEL6(转)

    文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set   //查看到的是局部变量和全局变量2种 [ ...

  5. sqlite3加密支持

    sqlite3加密支持 sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便. wxSqlite3 wxS ...

  6. protobuf php

    关于protobuf php,版本不知哪个好: https://github.com/yuangu/pb4php https://github.com/drslump/Protobuf-PHP htt ...

  7. google protobuf使用

    下载的是github上的:https://github.com/google/protobuf If you get the source from github, you need to gener ...

  8. UVa 10154 - Weights and Measures

    UVa 10154 - Weights and Measures I know, up on top you are seeing great sights,  But down at the bot ...

  9. BZOJ 2228 礼物(gift)(最大子长方体)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2228 题意:给出一个只含有NP两种字母的长方体.从中找出只含有字母N的长方体,造型为a* ...

  10. leetcode:Happy Number

    要求:Write an algorithm to determine if a number is "happy". A happy number is a number defi ...