このcコードは何をしますか?空の括弧内のアスタリスクは何を意味しますか?
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
特に私は混乱しました。
このcコードは何をしますか?空の括弧内のアスタリスクは何を意味しますか?
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
特に私は混乱しました。
のように、我々は次のように使用型キャストを行うことを忘れないでくださいする必要がありますある特定の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値をキャスト。
関数ポインタへのキャストです。
シーケンス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)();
この関数呼び出しは戻り値を破棄します。 – haccks
int (*func)();
は、任意の数のパラメータを取り、そしてint
を返す関数へのポインタとしてfunc
を宣言します。声明func = (int (*)()) code;
で
、キャストがcode
に適用され、その後、関数ポインタfunc
に割り当てています。
(int)(*func)();
はあまり意味がありません。キャストは必要なく、戻り値を破棄します。あなたは、いくつかのvalue
をキャストしたいとき
(type_to_cast) value;
:コールは単に
int var = func();
または
int var = (*func)();
[MCVE](http://stackoverflow.com/help/mcve)を提供してください。 _subj_とは何ですか? – Harald
[関数を返す-intint'へのポインタに 'code'をキャストします](http://cdecl.ridiculousfish.com/?q=%28int+%28*%29%28%29%29code)。 – WhozCraig
@WhozCraigあなたのリンクを開くときに「間違ったリクエスト」 – lucidbrot