阵列的长度是多少?

时间:2011-04-11 17:37:58

标签: c arrays

长度在这句话中的含义是什么:“每个数组都与该数组的”长度“一起传递给函数。”

这是否意味着数组的大小?

2 个答案:

答案 0 :(得分:4)

不一定。数组的大小是为其定位的字节数(或者至少知道sizeof(array)将返回的内容,如果它知道有多少元素数组)数组的长度是数组中元素数

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

答案 1 :(得分:2)

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

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

  • 同意数组长度。代码只知道某些数组具有一定的长度,例如,17。这通常被认为是不好的做法,但人们会为特定于问题域的数组执行此操作,例如3D图形的转换矩阵,它往往有4行。 / LI>
  • 使用常量声明或宏定义记录数组长度,并使用该符号控制访问数组的循环。
  • 将包含运行时数组大小的已知变量与数组隐式关联。程序在需要知道数组大小时查询变量。
  • 将指针传递给数组,调用者将的长度传递给被调用者。现在,被叫方知道长度,然后可以将其传递给被叫方呼叫的任何人。
  • 将数组及其长度打包在struct中,并将指针传递给struct。现在被调用者可以查询结构来确定数组大小。

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