c - 为什么 C 会有 "fake arrays"?

标签 c arrays

<分区>

我正在阅读 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/

相关文章:

javascript - Node js - 如何返回多维数组

当数据复制/扫描/读取到未初始化的指针时崩溃或 "segmentation fault"

c - OpenGL 顶点数组

c - 为什么 2 在 Codeblocks 上不小于 10?

java - Java中整数数组的置换算法

php - 将字符串分解为多个单词

c - C 中的 Char 数组

c - Malloc 不为 char* 分配内存

arrays - 在 tableview 的 as 部分按日期过滤数组

php - 如何在 PHP 中将数组插入数组中的数组