打印一段代码来证明,数组名代表的是数组首元素的地址
#includeint main() { int arr[10] = {0}; int* p = arr; int i = 0; for(i=0; i<10; i++) { printf("%p == %p",&arr[i],p+i); } return 0; }
输出结果为
代码中的指针 p 指向数组 arr ,输出时输出的是 p+i 产生的就是数组中下标为 i 这个元素的地址。
所以输出结果可以证明 &arr【i】= p+i
所以arr[2] = *(arr+2) = *(2+arr) = *(p+2) = *(2+p) = p[2]
实际上代码在运算时会把数组转换成 *(地址 + (【】中的下标))
所以有以下结论
arr【2】= 2【arr】= *(2+arr)
p【2】= 2【p】= *(2+p)



