<分区>
我正在阅读 The Unix haters handbook在第 9 章中,有些东西我不太明白:
C doesn’t really have arrays either. It has something that looks like an array but is really a pointer to a memory location.
除了使用指向内存位置索引的指针之外,我真的想不出有什么方法可以将数组存储在内存中。无论如何,C 如何实现“假”数组?这种说法是否属实?
<分区>
我正在阅读 The Unix haters handbook在第 9 章中,有些东西我不太明白:
C doesn’t really have arrays either. It has something that looks like an array but is really a pointer to a memory location.
除了使用指向内存位置索引的指针之外,我真的想不出有什么方法可以将数组存储在内存中。无论如何,C 如何实现“假”数组?这种说法是否属实?
最佳答案
我认为作者的意思是 C 数组实际上只是指针运算的一层薄薄的外表。下标运算符被简单地定义为 a[b] == *(a + b)
,因此您可以轻松地使用 5[a]
而不是 a[ 5]
并做其他可怕的事情,例如访问最后一个索引之后的数组。
与此相比,“真正的数组”应该知道自己的大小,不会让您进行指针运算,不会错误地访问最后一个索引,也不会使用不同的项类型访问其内容。换句话说,“真正的数组”是一种紧密的抽象,不会将您束缚于单一表示形式——例如,它可能是一个链表。
附言。为了省点麻烦:我对此没有任何意见,我只是解释书中的引述。
关于c - 为什么 C 会有 "fake arrays"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652112/