C 数组的长度是多少?

C 数组的长度是多少?,c,arrays,C,Arrays,在这句话中,length的确切含义是什么:“每个数组与该数组的“length”一起传递给函数。” 它是指数组的大小吗?在C中,仅仅因为你有一个指向数组的指针,并不意味着你知道它的长度(它有多少个条目)。您必须知道如何避免数组索引错误 只有少数几种方法可以做到这一点: 商定数组长度。代码只知道某些数组具有特定的长度,例如17。这通常被认为是不好的做法,但人们对特定于问题域的数组(如3D图形的平移矩阵)这样做,因为它们往往有4行 使用常量声明或宏定义记录数组长度,并使用该符号控制访问数组的循环 隐

在这句话中,length的确切含义是什么:“每个数组与该数组的“length”一起传递给函数。”


它是指数组的大小吗?

在C中,仅仅因为你有一个指向数组的指针,并不意味着你知道它的长度(它有多少个条目)。您必须知道如何避免数组索引错误

只有少数几种方法可以做到这一点:

  • 商定数组长度。代码只知道某些数组具有特定的长度,例如17。这通常被认为是不好的做法,但人们对特定于问题域的数组(如3D图形的平移矩阵)这样做,因为它们往往有4行
  • 使用常量声明或宏定义记录数组长度,并使用该符号控制访问数组的循环
  • 隐式地将包含运行时数组大小的已知变量与数组关联。当程序需要知道数组大小时,它会参考变量
  • 将指向数组的指针和调用者已知的长度传递给被调用者。现在被调用方知道长度,并且可以将其传递给被调用方调用的任何人
  • 将数组及其长度打包到结构中,并传递指向该结构的指针。现在被调用方可以参考结构来确定数组大小

这个讨论对于C语言来说有点混乱,因为在一般的对话中,我们倾向于将数组长度和数组大小视为同义词。但在C中,“大小”有一个特定的含义;它是实体占用的存储单元数。它很容易从数组长度计算出来,有时程序会传递“大小”而不是长度。IMHO您应该将数组长度传递给通过索引数组来操作数组的函数,因为长度更抽象,更容易理解。

不一定。数组的size是为其定位的字节数(或者如果知道数组中有多少个元素,则至少
sizeof(array)
将返回的值)。数组的length是数组中的元素数

例如:
short-arr[10]长度为10,但大小为20(每短两个字节)