2
#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;
}

誰かがこれがどのように起こっているのか、そしてその理由を明確に説明できますか

4

2 に答える 2

8

想起:

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)." ];

...完全に有効なポインター演算の。

于 2013-08-10T19:36:07.663 に答える