zoukankan      html  css  js  c++  java
  • 【C语言】为什么指明数组的列数?

      首先,我们拿二维数组为例。二维数组称为矩阵。二维数组在概念上是二维的,但实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,而数组的行数没有太大关系。因为函数调用时传递的是一个指针,它指向由行向量构成的一维数组。其中每个行向量是具有n(n代表列数)个整型元素的一维数组。

      例如如下二维数组:

    static char daytab[2][13] = {
           {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
           {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    };

      在把上述daytab数组作为实参传递给函数时,传递给函数的是一个指向2个对象的指针,其中每个对象是由13个整型元素构成的一维数组。因此如果将数组daytab作为参数传递给函数f,那么f的声明应该写成下列形式:

    f(int daytab[2][13]) { ... }
    f(int daytab[][13]) { ... }
    f(int (*daytab)[13]) { ... }  //这相当于声明了一个数组,该数组有13个元素,每个元素都是一个指向整型对象的指针。

      一般来说,除数组的第一维(下标)可以不指定大小外,其余各维都必须明确指定大小。

      在一维存储器中存放二维数组有两种方式:

    • 一种是按行排列,即放完一行之后顺次再放入第二行。
    • 一种是按列排列,即放完一列之后顺次再放入第二列。

      在C语言中,二维数组是按行排列的。

      参考资料

      [1] http://hi.baidu.com/qfpnptyxswbqtyq/item/03e54cdfb35c444afb57680a

  • 相关阅读:
    【转】awk内置变量
    【转】awk数组操作
    【转】awk 数组用法【精华贴】
    【转】linux shell 逻辑运算符、逻辑表达式
    指挥作战
    人脸相关
    TD
    后台
    前台 html 空格
    linux
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3813284.html
Copyright © 2011-2022 走看看