指针和数组名的下标运算

来源:百度知道 编辑:UC知道 时间:2024/05/18 12:19:08
有一个文件有如下声明:
int a[10];
int *b =a;
但在另一个不同的文件中有这样的代码:
extern int *a;
extern int b[];
...
x=a[3];
y=b[3];
请解释下这两条赋值语句执行时会发生什么?
图片是参考答案,但是我迷糊,指针初始化都指向那个数组了,那指针和数组名小标运算都是一个效果了啊……

编译会通不过的,会提示你定义了两个不同类型的变量a和b.说明指针和数组确实是两个不同的类型,虽然在使用上是差不多的.

第一段:给出了a的数组空间,,而b是指向这个数组空间的指针,它默认指向a[0].
第二段:这是扩展变量的作用域,使用的是同一段中相同的数组空间.
第三段:X,Y的值都是a[3]值.

会将a的第三个值赋给x ,b的第三个值赋给y。
也可以用*(a+3)和上面的效果相同。

小的不才,补充一句哈,在编译时,对数组元素a[i]就是按*(a+i)处理的,即按数组首元素的地址加上相对应位移量得到要找到的元素的地址,然后找到该单元的内容。