[]运算符如何工作?

mou*_*che 1 c c++ arrays

我正在使用C,但我认为这是一个更低级别的问题,不是语言特定的.

程序如何使用array [0]或array [6]正确地获取正确的数据,而不管它包含什么类型的数据?它是在内部存储长度还是有某种分隔符来查找?

Jen*_*edt 13

编译器知道sizeof基础数据类型并将正确的字节偏移量添加到指针.

a[10]等同于*(a + 10)相当于*(10 + a)其相当于10[a],不开玩笑.


Jer*_*fin 7

编译器在编译时计算出大小并对目标代码中的大小进行硬编码.


sta*_*ica 6

我想提供除直接回答之外的其他内容.

关于C的历史,Dennis Ritchie的主页上有一篇有趣的文章,对数组,数组索引等有很多说法.

这可能不会直接回答你的问题,但它可能会进一步你对C数组的理解......这是一个有趣的读物.


Dav*_*har 5

都不是:-)

对于数组,编译器知道:(a)数组起始的地址,以及(b)数组所包含的元素类型(int,float,double等),以及每个元素的长度.

使用这两个信息,查找array[6]是一个简单的算术问题:从基址开始,并添加元素大小的6倍.