0

C リファレンス マニュアル、特に付録 A を読んでいるときに、次のステートメントを見つけました。

D の形式が ( D1 ) である宣言 TD では、D1 の識別子の型は D の型と同じです。括弧は型を変更しませんが、複雑な宣言子のバインディングを変更する場合があります。

宣言子はどのように ( D1 ) の形式を取ることができ、ここで参照されているバインディングの違いは何ですか。

例:int a適切な宣言ですが、どういうint (a)意味ですか?

4

1 に答える 1

6

int (a)とまったく同じ意味int aです。これは「複雑な宣言子」ではありません。

違いが生じる例は、関数ポインターを宣言する場合です。

int (*f)(float);

これは、"を受け取り、"を返すf関数へのポインタであることを意味します。括弧がないと、次のようになります。floatint

int *f(float);

これは、「は(を指すポインター) を受け取り、返すf関数である」ことを意味します。確かにかなり違うもの。floatint*int

ウェブサイトcdecl.org (またはコマンド ライン ツールcdecl) を試して、これらについて説明してください。

cdecl> explain int (*f)(float);
declare f as pointer to function (float) returning int
cdecl> explain int *f(float);
declare f as function (float) returning pointer to int
于 2013-05-19T14:56:44.330 に答える