T A[N];
它在存储器中分配了L×N字节的连续区域,这里L是数据类型T的大小(单位为字节)。我们用XA来表示起始位置。其次,它引入了标识符A,A可以用来作为指向数组开头的指针。这个指针的值就是XA。可以用0~N-1之间的整数索引来访问数组元素。数组元素i的存放地址XA+L*i.
指针运算
如果p是一个指向类型T的数据的指针,p的值为Xp,表达式p+i的值为Xp+L*i,这里L是数据类型T的大小。
单操作数的操作符&和×可以产生指针和间接引用指针。也就是,对于一个表示某个对象的表达式Expr,&Expr表示一个地址。对于表示一个地址的表达式Addr-Expr,×Addr-Expr表示该地址中的值。因此,表达式Expr与×&Expr是等价的。可以对数组和指针应用数组下标操作,如数组引用A[i]与表达式×(A+i)是一样的。它计算地i个数组元素的地址,然后访问这个存储器位置。
嵌套数组
int A[4][3];
结构
C的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。结构的各个组成部分是用名字来引用的。结构的实现类似于数组的实现,因为结构的所有组成部分都存放在存储器中连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器保存关于每个结构类型的信息,指示每个域的字节偏移,它以这些偏移作为存储器引用指令中的位移,从而产生对结构元素的引用。