ホームページ  >  記事  >  バックエンド開発  >  Cで関数へのポインタを宣言するにはどうすればよいですか?

Cで関数へのポインタを宣言するにはどうすればよいですか?

青灯夜游
青灯夜游オリジナル
2019-03-11 11:32:174779ブラウズ

C では、通常のデータ ポインター (int *、char * など) と同様に、関数へのポインター、つまり関数ポインターを宣言することもできます。では、どうやって宣言すればよいのでしょうか?関数ポインタの宣言方法については以下の記事で紹介していますので、ご参考になれば幸いです。 [ビデオチュートリアルの推奨: C 言語チュートリアル ]

Cで関数へのポインタを宣言するにはどうすればよいですか?

関数へのポインターを宣言するにはどうすればよいですか?

まず、C で整数へのポインターを作成する方法を理解しましょう。

int * ptrInteger; / *我们在int和ptrInteger之间放置了一个*运算符来创建指针。* /

ここでの ptrInteger は整数へのポインタです。これが理解できれば、論理的には関数へのポインタを宣言することに問題はないはずです。

次は関数を宣言する方法を見てみましょう。例:

int foo(int);

foo これは、int 型パラメータを返したり受け取ったりする関数です。したがって、論理的には、単に int と foo(int) の間に * 演算子を置くだけで、関数へのポインタが作成されるはずだと考えるでしょう、つまり:

int * foo(int);

しかし、これは真実ではありません。なぜなら、c 演算子の優先順位も考慮されるからです。ここでは、演算子 () が演算子 * より優先されます。上記の宣言は次のことを意味します: 関数 foo、パラメータの 1 つは int 型、戻り値は int* (整数ポインタ) です。これは私たちが望んでいることではないため、c 演算子の優先順位も考慮する必要があります。

したがって、* 演算子を何らかの方法で foo にバインドする必要があります。これを行うには、() 演算子を使用して C 演算子のデフォルトの優先順位を変更します。例:

int (*foo)(int);

* 演算子は foo とともに使用され、foo は関数名であるため、関数へのポインターが宣言されます。

関数ポインタの使用例:

#include <stdio.h> 
// 具有int参数和void返回类型的普通函数
void fun(int a) 
{ 
    printf("a值为: %d\n", a); 
} 
  
int main() 
{ 
    // fun_ptr 是指向函数fun()的指针
    void (*fun_ptr)(int) = &fun; 
  
    /* 相当于下面两行
       void (*fun_ptr)(int); 
       fun_ptr = &fun;  
    */
  
    //使用fun_ptr调用fun()
    (*fun_ptr)(10); 
  
    return 0; 
}

出力:

Cで関数へのポインタを宣言するにはどうすればよいですか?

注:

1. 通常のポインターとは異なり、関数ポインターはデータではなくコードを指します。通常、関数ポインターには、実行可能コードの先頭が格納されます。

2. 通常のポインターとは異なり、メモリの割り当てと割り当て解除に関数ポインターを使用しません。

3. 関数ポインターでは、関数の名前を使用して関数のアドレスを取得することもできます。

4. 通常のデータ ポインターと同様に、関数ポインターはパラメーターとして渡すことも、関数から返すこともできます。

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がCで関数へのポインタを宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。