以下は、 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'