关于c ++:为什么这个代码片段可以在C中编译?

Why is this snippet compilable in C?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In C arrays why is this true? a[5] == 5[a]

"zdvnngfgnfg"[ 3 ]; </P >


它相当于

1
"zdvnngfgnfg"[3];

这是合法的,意思是"把那个字面上的地址加上3*sizeof(char)"。无论如何都没有效果。

也可以看到这个非常相似的问题。


arr[i]被解析为*(arr+i),可以写成*(i+arr),因此i[arr]现在,"strngjwdgd"是指向存储在只读位置的常量字符数组的指针。所以它起作用了!!


字符串文字(array衰减为char*类型的指针。然后,我们来看看第四个元素:

1
3["zdvnngfgnfg"] =="zdvnngfgnfg"[3]

为什么可以在数组前面写下标是另一个问题:

在C数组中,为什么是这样?