const的功能和二维数组

看到一个const,其初始目的:取代预编译指令,即预处理,扬长避短。

具体作用:

  1. 定义const常量,具有不可变性。
  2. 防止对程序的意外修改。如:void f(const int i) { i=10;//error! } 
  3. 节省空间,节省内存。
  4. 提高效率。
  5. 便于类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
  6. 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变。

10月31日笔记,万圣节快乐!

二维数组,举个例子(来自《C Prime Plus(第五版)中文版》第252页:

const float rain[YEARS][MONTHS] =
    {
        {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
        {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
        {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
        {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
        {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
    };

这个初始化使用了5个数值列表,没个数值列表都用花括号括起来。第一个列表被赋给数组的第一行,第二个列表被赋给数组的第二行,依次进行赋值。如果第一个列表中有10个数值,则第一行只有前10个元素得到赋值,最后2个元素被默认初始化为0。如果列表中的数值多余12个,则报告错误;而且这些数值不会影响到下一行的赋值。

初始化时候也可以省略内部的花括号,只保留最外面的一对花括号。只要保证数值的个数正确,初始化效果就是一样的。如果数值的个数不够,那么在数组初始化时候,按照先后顺序来逐行赋值,因此前面的元素首先得到赋值,直到没有数值为止。后面没有赋值的元素被初始化为0。如下:

//新方法
int sq[2][3]={
   {5,6},
   {7,8}
};

//老方法
itn sq[2][3]={5,6,7,8};

推荐使用新方法,方便对代码进行阅读理解和检查。

更多维数的数组

前面关于二维数组的讨论对于三维乃至更多维数的数组同样适用。可以用如下方式声明三维数组:

int box[10][20][30];

可以这样直观的理解:一对数组是排成一行的数据,二维数组是放在一个平面上的数组,三维数是把平面数据一层一层的垒起来。另一种理解是认为它是数组的数组的数组。

通常处理三维数组时候需要3重嵌套循环,处理思维数组需要4重嵌套循环,对于其他多维数组,以此类推。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章