12

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

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

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

2 回答 2

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]也是一个等价的表达式。

我不建议使用此“功能”,但是……说真的,不要这样做。

于 2012-12-06T20:22:19.897 回答
8

运算符[]与指针算术具有相同的语义。Soa[i]等价于*(a + i)which 等价于*(i + a)which 等价于i[a]:

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

于 2012-12-06T20:26:20.933 回答