12

以下は、 Webサイトからコピーされたコードです。方向に設定された値は、「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];

変だね?あなたの場合、文字列リテラル(配列)の3番目の位置にインデックスを付けています"nsew"

some_ptr[n]はと同等*(some_ptr + n)であり、加算は可換であるため、。とも同等*(n + some_ptr)です。その結果、これn[some_ptr]も同等の式になります。

ただし、この「機能」の使用はお勧めしません...真剣に使用しないでください。

于 2012-12-06T20:22:19.897 に答える
8

演算子[]のセマンティクスは、ポインター演算と同じです。つまり、これは次と同等a[i]です。*(a + i)*(i + a)i[a]

だからdirection["nsew"]====== "nsew"[direction]_ "nsew"[3]_'w'

于 2012-12-06T20:26:20.933 に答える