C 为什么即使将数组名与其索引交换,也可以使用数组?
检查我编写的以下C代码。我认为编译器可能会抱怨I[a],但实际上它打印的值与a[I]完全相同。这是怎么发生的C 为什么即使将数组名与其索引交换,也可以使用数组?,c,arrays,C,Arrays,检查我编写的以下C代码。我认为编译器可能会抱怨I[a],但实际上它打印的值与a[I]完全相同。这是怎么发生的 #include <stdio.h> int main(){ int a[3] = {0, 1, 2}; int i; for(i = 0; i < 3; i++){ printf("normal a[%d] = %d\n", i, a[i]); printf("abnormal a[%d] = %d\n", i, i[a]); }
#include <stdio.h>
int main(){
int a[3] = {0, 1, 2};
int i;
for(i = 0; i < 3; i++){
printf("normal a[%d] = %d\n", i, a[i]);
printf("abnormal a[%d] = %d\n", i, i[a]);
}
return 0;
}
a[i]
相当于*(a+i)
i[a]
相当于*(i+a)
,后者相当于*(a+i)
因此,实际上,两者都是相同的。因为点击我评论中的代码,看看为什么我知道这可能是显而易见的,因为人们对我的帖子投了反对票。但为了确保我明白发生了什么。要做指针算术,假设a是指针,i是索引,我总是可以做i[a],它总是等于*(a+i)?@dannycrane的人很可能会对你的帖子投反对票,因为这是一个常见的常见问题,他们认为你在发布问题之前没有做足够的研究。至于它为什么有效,请检查链接的重复问题中的答案。
normal a[0] = 0
abnormal a[0] = 0
normal a[1] = 1
abnormal a[1] = 1
normal a[2] = 2
abnormal a[2] = 2