经常听有人说C语言里其实没有数组,说实话刚开始我是拒绝的,毕竟自己用了这么长时间
他为了说明这个问题,给了我这样一个简短的程序
#include <stdio.h> int main(void){ int a = 1; int x[5]={1,2,3,4,5}; printf("%d",a[x]); return 0; }
结果程序运行是这样的。咦???不应该报错吗?哪有a这个数组???这是什么鬼
估计经常写C语言的一眼就能看出来了吧,但是我还是写一下这里的原理吧
首先,int x[5],x实际上保存的是这个数组首元素的地址也就是&x[0],a[x]的等效写法是*(a+&x),因为上面说了x实际上是x[0],所以可以进一步写成*(a+&x[0]),又因为a = 1,所以可以替换成*(&x[0]+1),也就是x[1],所以就是x[1]对应的值:2
不过至于C语言到底有没有数组,这个还有待商榷吧