C专家编程-数组和指针并不相同

1 数组并非指针

extern int *x;

extern int y[];

第一条语句声明x是个int型的指针;第二条语句声明y是个int型数组,长度尚未确定(不完整的类型),其存储在别处定义。

file1:

int mango[100];

file2:

extern int *mango; // 程序无法运行

更改为 extern int mango[]; //OK,声明与定义匹配

2 声明与定义

定义是一种特殊的声明,它创建了一个对象并分配了内存;声明简单地说明了在其他地方创建的对象的名字,它允许你使用这个名字。

即 int mango[100]; 为定义;extern int mango[]; 为声明。

3 数组和指针如何访问

数组名用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象。因此,数组名是个左值但不是可修改的左值。

编译器为每个变量分配一个地址(左值)。这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(它的右值)只有在运行时才可知。如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器中。

下图A展示数组的下标引用过程;图B展示对指针的引用过程;图C展示对指针进行下标引用的过程。

C专家编程-数组和指针并不相同_第1张图片

你可能感兴趣的:(C专家编程-数组和指针并不相同)