#include<stdio.h>
int main() {
int buff[] = {1,2,3,4,5,6,9,10};
char c = (buff+1)[5];
printf("%d\n",c);//output is 9
return 0;
}
誰かがこれがどのように起こっているのか、そしてその理由を明確に説明できますか
想起:
C では、角括弧[ ]
は暗黙的に*( ... )
.
あなたが提供したコードのスニペットで起こっていることは、明らかなポインター演算ではありません。この行:
char c = (buff+1)[5];
...は次と同等です(C標準による):
char c = *( ( buff + 1 ) + 5 );
...配列の7番目の要素(6番目の位置)を指し、それを逆参照します。19 ではなく 9 を出力する必要があります。
述べる:
角括弧に関する注に続いて、以下が同等であることを確認することが重要です。
arr[ n ] <=> n[ arr ]
...arr
は配列でn
、数値です。より複雑な例:
' '[ "]; i < 0; i++; while ( 1 ); do something awesome (y)." ];
...完全に有効なポインター演算の。