2

関数宣言の意味を理解しようとしています:

int *f();

int (*g)();
4

4 に答える 4

6
int *f();

上記の行は、fパラメーターの数が指定されておらず、を返す関数の宣言ですint *

int (*g)();

上記の行は、gパラメーターの数が指定されておらず、を返す関数へのポインターの宣言ですint

于 2012-11-19T21:38:57.247 に答える
4

cdecl(1)ここでの他の正解への追加として、これらの種類の宣言を解読するための便利なツールであることに言及したいと思います。

$ cdecl
Type `help' or `?' for help
cdecl> explain int *f();
declare f as function returning pointer to int
cdecl> explain int (*g)();
declare g as pointer to function returning int

cdecl既にマシンにインストールされている場合もありますが、 http://cdecl.orgの便利な Web インターフェイスから使用することもできます。

于 2012-11-19T21:41:49.727 に答える
3

fは関数を返しint*gは関数を返すポインタintです。

于 2012-11-19T21:38:34.103 に答える
2

function-call などの後置演算子は、 などの()単項演算子よりも優先順位が高い*ため、

T *f();

として読む

   f     -- f
   f()   -- is a function (() binds before *)
  *f()   -- returning a pointer
T *f();  -- to T (for some type T)

の前に強制的*にバインドする()場合は、括弧で明示的にグループ化する必要があるため、

T (*g)();

として読む

    g     -- g
  (*g)    -- is a pointer
  (*g)()  -- to a function
T (*g)(); -- returning T.  

規則は配列についても同様です。 は へのポインターの配列ですT *a[N]が、 は の配列へのTポインターT (*p)[N]ですT

于 2012-11-19T22:07:10.470 に答える