zoukankan      html  css  js  c++  java
  • 关于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 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。

  • 相关阅读:
    天兔(Lepus)监控系统慢查询分析平台安装配置
    java怎么用一行代码初始化ArrayList
    yum命令不能使用的相关错误
    【转】Android APP性能测试
    【转】Java经典问题算法大全
    [转]java中Map,List与Set的区别
    关于编写性能高效的javascript事件的技术
    ESLint 规则
    HTML5 使用application cache 接口实现离线数据缓存
    qunit 前端脚本测试用例
  • 原文地址:https://www.cnblogs.com/lijiaxin/p/10652260.html
Copyright © 2011-2022 走看看