は、このような宣言void *(*function)()
は有効ですされていますか? 有効な場合、*function
は、呼び出された関数へのアドレスを返します。 そのアドレスには、どのような値が返されていますか? は、そのアドレスの保存値はあり、それがゼロの場合は0で、return 0
および戻り値の型void
を持つ関数で何も返さないの違いは何ですか。関数へのポインタとその戻り値の型(ボイド)
-1
A
答えて
1
次のように宣言が読まれる:
function -- function is a
*function -- pointer to
(*function)() -- function taking unspecified parameters
*(*function)() -- returning pointer to
void *(*function)(); -- void
ので、function
がです機能自体ではなく、関数型へのポインター。あなたは、それぞれがvoid
へのポインタを返す、複数の機能を持つことができます:
void *foo(void) { ... }
void *bar(void) { ... }
void *bletch(void) { ... }
あなたはそれらの機能のそれぞれを指し、そして呼び出すためにどの実行時に決定するfunction
ポインタを使用することができます。
if (condition1)
function = foo;
else if (condition2)
function = bar;
else
function = bletch;
void *ptr = function(); // or (*function)();
1
void * (*function)();
手段表記「引数の不特定多数を取る関数を指すfunction
という名前の関数ポインタを宣言し、次にvoid *
返す。」
が、これは単に宣言以来それは関数を定義していないので、返される値については何も言えません。あなたはそれを呼び出す前にこのポインタを関数を指すように割り当てる必要があります。
あなたがfunction
を呼び出す場合、あなたはそれがアドレスが含まれていますが、間接参照することはできませんので、「純粋なメモリアドレス」として考えることができvoid *
を、取り戻すだろう、何かを指すようにfunction
を割り当ててやるたらキャストのないオブジェクトに
void *
を返すことは、戻り値の型がvoid
の関数と同じではないことに注意してください。かつての手段は、「私は、メモリアドレスを返す」と後者の手段は、「私は全く何も返しません。」
関連する問題
- 1. 関数戻りへのポインタ
- 2. スウィフト関数とボイド戻り型とノンリターン型
- 3. 戻り値の型ポインタがタイプの場合の関数の値
- 4. 戻り値の型としてポインタを持つ関数
- 5. C++の関数ポインタの戻り値の型
- 6. Fortran:関数の戻り値の型からの値へのアクセス
- 7. 関数ポインタ使用時の戻り値
- 8. 変換演算子から関数ポインタへの戻り値と引数型の抽出
- 9. そのパラメータの戻り値の型から関数の戻り値の型を推測
- 10. XSLT関数の戻り値の型
- 11. クラスメンバ関数の戻り値の型
- 12. 方法は、メソッドの戻り値のボイド
- 13. Cのポインタと戻り値としての関数パラメータ
- 14. VBA:カスタムデータ型と関数(戻り値)
- 15. デフォルトのCのboolean型の戻り関数の戻り値++
- 16. PostgreSQL関数戻り値の型エラー
- 17. 関数の戻り値への参照
- 18. React - setStateへの関数の戻り値
- 19. ポインタの戻り値とスコープ
- 20. がなぜその戻り値の型関数のthisポインタを返さないため、コンパイラのスローエラーがクラス名&
- 21. C++の戻り値とオブジェクトへのユニークなポインタの返り方
- 22. 一般的な戻り値の型とラムダ関数の引数
- 23. 渡された関数からの戻り値の型戻り型
- 24. 関数の別の関数への戻り値python
- 25. VS2015 C++コルーチン:promise.get_return_object()戻り値の型とコルーチン戻り値の型
- 26. ScalaのflatMap関数と戻り値の型エラー
- 27. 異なる戻り値の型と引数を持つCの関数ポインタの配列
- 28. 関数Cからの戻りポインタ
- 29. 関数の戻り値型からジェネリック型に推論する
- 30. コマンドラインPARMS:配列として関数戻り値の型?ここ
* "ですそのような宣言 'void *(* function)()'は有効ですか? " - コンパイラはあなたにこの質問に対する最良の答えを与えます。はい、有効です。 'function'は引数を取らずにvoidポインタを返す関数へのポインタです。 C宣言を読む方法の詳細については、[この回答](https://stackoverflow.com/a/30345939/4265352)を参照してください。 – axiac
おそらく、より良いアプローチは、あなたがこれらの質問を持っているかどうかを説明することでしょう。孤立しているので、ほとんど何も意味しません。 –