Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
GCC コンパイラで Ubuntu 12.04lts を使用しています。このプログラムの結果は 10 です。このプログラムの結果がこのような結果になる理由を説明していただけますか?
#include <stdio.h> void main(void) { int arr[1] = {10}; printf("\n%d\n\n", 0[arr]); }
arr[0]に内部展開され*(arr+0)ます。同様に、同じものを指している に0[arr]展開されます。*(0+arr)したがって、10 と表示されます。
arr[0]
*(arr+0)
0[arr]
*(0+arr)
一般に、配列またはポインターaの場合、 はa[b]常に、 が配列またはポインターの開始アドレスであり、がオフセット*(a+b)であることを意味します。したがって、とは等価です。aba[b]b[a]
a
a[b]
*(a+b)
b
b[a]