为什么这个C数组引用看起来不正确?

时间:2012-12-06 20:19:51

标签: c

以下是从website复制的一段代码。 为方向设置的值从“nsew”打印相应的字符。例如,此代码的输出是字符w。

我想知道它是如何运作的。

#include<stdio.h>
void main (void){
   int direction = 3;
   char direction_name = direction["nsew"];
   printf("%c",direction_name);
}

2 个答案:

答案 0 :(得分:17)

这是因为数组下标运算符是可交换的,即:

const char *p = "Hello";
char x = p[0];

相当于

const char *p = "Hello";
char x = 0[p];

很奇怪,是吗?在您的情况下,您将索引到字符串文字的第三个位置(这是一个数组)"nsew"

some_ptr[n]相当于*(some_ptr + n),由于加法是可交换的,因此它也等同于*(n + some_ptr)。然后,n[some_ptr]也是一个等价的表达式。

我不建议使用这个“功能”但是......严重的是,不要这样做。

答案 1 :(得分:8)

运算符[]与指针算术具有相同的语义。因此a[i]相当于*(a + i),相当于*(i + a),相当于i[a]

所以direction["nsew"] == "nsew"[direction] == "nsew"[3] == 'w'