関数パラメーターと関数パラメーターへのポインター?

vsoftco

私は2つの宣言の違いがあるかを理解したいと、思いf1f2以下、:でf1私はパラメータの型の関数へのポインタであることを宣言しvoid()ているか、f2宣言が異なりますかf1宣言は同等ですか?main私はプロトタイプの関数でそれらの両方を呼び出すことができvoid ()ます。値/ポインタ/参照を渡すという概念は理解していますが、これらは関数であり、実際には違いを理解していません。パラメータとして渡された関数を「変更」できるわけではありませんf1...ありがとうございます。

PS:よく知られているMost VexingParsingの問題にぶつかったときにこの質問がありました:)

#include <iostream>

using namespace std;

void f1(void (*x)())
{
    x();
}

void f2(void x())
{
    x();
}

void g1()
{
    cout << "Invoking f1(g1())" << endl;
}

void g2()
{
    cout << "Invoking f2(g2())" << endl;
}


int main() 
{
    f1(g1);
    f2(g2);
}

プログラムがコンパイルされ、出力は次のようになります。

Invoking f1(g1())
Invoking f2(g2())
クリス・ドッド

それらは同等です。引数で発生する暗黙的なポインタ変換に混乱しています。

関数を引数として関数に渡すことはできないため(Cの関数では、関数を呼び出すかアドレスを取得する以外に何もできません)、コンパイラーは引数を関数へのポインターにサイレントに変更します。

これは、配列の場合とほとんど同じです。配列を関数の引数として渡すこともできないため、関数の引数を配列として宣言すると、サイレントにポインターに変更されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数ポインタと任意のパラメータ

分類Dev

パラメータとしてのCADT関数ポインタ?

分類Dev

関数パラメーターのvoidポインター

分類Dev

関数パラメーターとしてのvoid **ポインターとvoid * []

分類Dev

DoxygenのパラメーターとしてのC ++関数ポインター

分類Dev

関数パラメーターとしてのconstポインターの意味

分類Dev

関数パラメーターのインポートnumpy

分類Dev

関数パラメーターとしての明示的なvoidポインター

分類Dev

関数パラメーターとしてのダブルポインター

分類Dev

関数パラメーターとしてのLLVMポインター

分類Dev

cの関数のパラメーターとしての2D配列へのポインター

分類Dev

C ++の未定義の関数とパラメーターへのポインター

分類Dev

関数のパラメーターとして渡された配列へのポインターの使用

分類Dev

関数パラメーターとしての2D配列へのポインター

分類Dev

関数ポインタへのCジェネリックパラメータ

分類Dev

関数ポインタパラメータの宣言方法

分類Dev

関数パラメーターとしてのポインター上のgolangポインター

分類Dev

関数C ++へのパラメーターとして変数パラメーターを持つ関数

分類Dev

メンバー関数エラーへのポインター

分類Dev

関数パラメーターのQtスマートポインター

分類Dev

C ++のパラメータと関数

分類Dev

Java8のパラメータとしての関数ポインタ

分類Dev

変数のパラメーター化とタイプを持つC関数ポインター

分類Dev

関数へのポインターまたはコピーのパラメーターを渡しに行く

分類Dev

パラメータにポインタのない関数ポインタ

分類Dev

Cの関数パラメータとしてvoidポインタを返す

分類Dev

関数とパラメーター

分類Dev

Eclipse-関数パラメーターのヒントへのポインター

分類Dev

あるC関数へのポインターを別の関数へのパラメーターとして渡す

Related 関連記事

  1. 1

    関数ポインタと任意のパラメータ

  2. 2

    パラメータとしてのCADT関数ポインタ?

  3. 3

    関数パラメーターのvoidポインター

  4. 4

    関数パラメーターとしてのvoid **ポインターとvoid * []

  5. 5

    DoxygenのパラメーターとしてのC ++関数ポインター

  6. 6

    関数パラメーターとしてのconstポインターの意味

  7. 7

    関数パラメーターのインポートnumpy

  8. 8

    関数パラメーターとしての明示的なvoidポインター

  9. 9

    関数パラメーターとしてのダブルポインター

  10. 10

    関数パラメーターとしてのLLVMポインター

  11. 11

    cの関数のパラメーターとしての2D配列へのポインター

  12. 12

    C ++の未定義の関数とパラメーターへのポインター

  13. 13

    関数のパラメーターとして渡された配列へのポインターの使用

  14. 14

    関数パラメーターとしての2D配列へのポインター

  15. 15

    関数ポインタへのCジェネリックパラメータ

  16. 16

    関数ポインタパラメータの宣言方法

  17. 17

    関数パラメーターとしてのポインター上のgolangポインター

  18. 18

    関数C ++へのパラメーターとして変数パラメーターを持つ関数

  19. 19

    メンバー関数エラーへのポインター

  20. 20

    関数パラメーターのQtスマートポインター

  21. 21

    C ++のパラメータと関数

  22. 22

    Java8のパラメータとしての関数ポインタ

  23. 23

    変数のパラメーター化とタイプを持つC関数ポインター

  24. 24

    関数へのポインターまたはコピーのパラメーターを渡しに行く

  25. 25

    パラメータにポインタのない関数ポインタ

  26. 26

    Cの関数パラメータとしてvoidポインタを返す

  27. 27

    関数とパラメーター

  28. 28

    Eclipse-関数パラメーターのヒントへのポインター

  29. 29

    あるC関数へのポインターを別の関数へのパラメーターとして渡す

ホットタグ

アーカイブ