数组如何知道它的大小?

时间:2014-06-29 17:44:45

标签: java c# objective-c arrays nsarray

我想知道 - 用不同的编程语言(比如Objective-C,C#和Java)。

数组如何知道它的大小? 当我要求数组大小(或计数)时,幕后发生了什么?

2 个答案:

答案 0 :(得分:1)

如评论中所述,数组大小存储为某种私有变量。把它想象成一个数组类(我认为它实际上是如何完成的)。

Class Array
{
   Private int size;
}

创建新数组时,它会设置该大小。如果以某种方式更改数组大小(取决于语言),则会创建一个新的数组类,并将旧数据复制到新数组中。当然还有其他技巧可以发挥作用。

同样,我不确定这是否在某些语言中如何工作,但你可以在数组末尾有一个特殊字符(如字符串的。\ 0字符),然后迭代所有的碎片。这当然意味着获得长度是一个O(n)操作,它不像最后一个(O(1))那样是常量。

如果你的语言有指针,你也可以使用指针。有一个前面的指针,一个指针的结束和做减法来获得大小。这比O(n)方法快,但每次都需要更多指令来执行减法。

有多种方法可以做到这一点。如果你想看看如何在C#中完成它,你可以看看Mono的做法。

答案 1 :(得分:0)

在一种将数组视为Object的语言中,它可以在创建时存储在字段中。 例如,在Java中,您可以使用其length字段查询数组的长度。 这显然不是表示数组的唯一方法。

在C中,数组只是一个连续存储的数据块,由指向第一个块的指针表示。您可以使用sizeof运算符查询其大小(以字节为单位)。然后可以通过将其总大小除以单个数据类型的大小来获得其长度。因此,如果您有一个数组arrsizeof(arr)/sizeof(arr[0])就是它的长度。

但这并不是全部,例如,在Haskell中,数组的工作方式非常不同。