以下は、 Webサイトからコピーされたコードです。方向に設定された値は、「nsew」からそれぞれの文字を出力します。たとえば、このコードの出力は文字wです。
私はそれがどのように機能するのか疑問に思っています。
#include<stdio.h>
void main (void){
int direction = 3;
char direction_name = direction["nsew"];
printf("%c",direction_name);
}
以下は、 Webサイトからコピーされたコードです。方向に設定された値は、「nsew」からそれぞれの文字を出力します。たとえば、このコードの出力は文字wです。
私はそれがどのように機能するのか疑問に思っています。
#include<stdio.h>
void main (void){
int direction = 3;
char direction_name = direction["nsew"];
printf("%c",direction_name);
}
これは、配列の添え字演算子が可換であるためです。つまり、次のようになります。
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]も同等の式になります。
ただし、この「機能」の使用はお勧めしません...真剣に使用しないでください。
演算子[]のセマンティクスは、ポインター演算と同じです。つまり、これは次と同等a[i]です。*(a + i)*(i + a)i[a]
だからdirection["nsew"]====== "nsew"[direction]_ "nsew"[3]_'w'