我想知道 - 用不同的编程语言(比如Objective-C,C#和Java)。
数组如何知道它的大小? 当我要求数组大小(或计数)时,幕后发生了什么?
答案 0 :(得分:1)
如评论中所述,数组大小存储为某种私有变量。把它想象成一个数组类(我认为它实际上是如何完成的)。
Class Array
{
Private int size;
}
创建新数组时,它会设置该大小。如果以某种方式更改数组大小(取决于语言),则会创建一个新的数组类,并将旧数据复制到新数组中。当然还有其他技巧可以发挥作用。
同样,我不确定这是否在某些语言中如何工作,但你可以在数组末尾有一个特殊字符(如字符串的。\ 0字符),然后迭代所有的碎片。这当然意味着获得长度是一个O(n)操作,它不像最后一个(O(1))那样是常量。
如果你的语言有指针,你也可以使用指针。有一个前面的指针,一个指针的结束和做减法来获得大小。这比O(n)方法快,但每次都需要更多指令来执行减法。
有多种方法可以做到这一点。如果你想看看如何在C#中完成它,你可以看看Mono的做法。
答案 1 :(得分:0)
在一种将数组视为Object的语言中,它可以在创建时存储在字段中。
例如,在Java中,您可以使用其length
字段查询数组的长度。
这显然不是表示数组的唯一方法。
在C中,数组只是一个连续存储的数据块,由指向第一个块的指针表示。您可以使用sizeof
运算符查询其大小(以字节为单位)。然后可以通过将其总大小除以单个数据类型的大小来获得其长度。因此,如果您有一个数组arr
,sizeof(arr)/sizeof(arr[0])
就是它的长度。
但这并不是全部,例如,在Haskell中,数组的工作方式非常不同。