2016-08-09 16 views
0

このcコードは何をしますか?空の括弧内のアスタリスクは何を意味しますか?

{ 
    int (*func)(); 
    func = (int (*)()) code; 
    (int)(*func)(); 
} 

特に私は混乱しました。

+0

[MCVE](http://stackoverflow.com/help/mcve)を提供してください。 _subj_とは何ですか? – Harald

+0

[関数を返す-intint'へのポインタに 'code'をキャストします](http://cdecl.ridiculousfish.com/?q=%28int+%28*%29%28%29%29code)。 – WhozCraig

+0

@WhozCraigあなたのリンクを開くときに「間違ったリクエスト」 – lucidbrot

答えて

1

のように、我々は次のように使用型キャストを行うことを忘れないでくださいする必要がありますある特定のtype

はまた、あなたが

return_type (*pointer_name) (data_types_of_parameters); 

として関数ポインタを定義し、関数ポインタの型が

return_type (*) (data_types_of_parameters) 

最後に、あなたが

(*func_pointer)(arguments); 
としてのポインタで関数を呼び出すことができます覚えて

これら4つの点を念頭に置いて、Cコード:

は、ファンクションポインタfuncを定義します。第

は、関数ポインタとしてcodeキャストとfunc

にその値を割り当て、funcが指し示す関数を呼び出し、intにreutrned値をキャスト。

5

関数ポインタへのキャストです。

シーケンスint (*)()は、不確定な数の引数を取る関数ポインタ用であり、intを返します。 (int (*)())のようなカッコで囲むと、式と組み合わせると式の結果がキャストされます。コメントを

あなたが提示したコード、:

// Declare a variable `func` which is a pointer to a function 
int (*func)(); 

// Cast the result of the expression `code` and assign it to the variable `func` 
func = (int (*)()) code; 

// Use the variable `func` to call the code, cast the result to `int` (redundant) 
// The returned value is also discarded 
(int)(*func)(); 
+3

この関数呼び出しは戻り値を破棄します。 – haccks

0
  • int (*func)();は、任意の数のパラメータを取り、そしてintを返す関数へのポインタとしてfuncを宣言します。声明func = (int (*)()) code;

  • 、キャストがcodeに適用され、その後、関数ポインタfuncに割り当てています。

  • (int)(*func)();はあまり意味がありません。キャストは必要なく、戻り値を破棄します。あなたは、いくつかのvalueをキャストしたいとき

    (type_to_cast) value; 
    

    :コールは単に

    int var = func(); 
    

    または

    int var = (*func)(); 
    
関連する問題