0

EDIT:わかりました、私は今それを手に入れたと思います:

ケース 1:

#include <stdio.h>
#define function(_a) ((_a)*2)

int main () {
    int (*func)(int) = function(0); // function(0) = 0
    func(7);
...
}

構文は問題ありませんが、実行時に main がアドレス NULL にアクセスしようとするため、Windows でソフトウェア クラッシュが発生し、UNIX 環境でセグメンテーション エラーが発生します。

ケース 2:

#include <stdio.h>
#define function(_a) ((_a)*2)

int main () {
    int (*func)(int) = function;
    func(7);
...
}

コンパイルエラー、「関数」は実際にはマクロであり、実際の関数ではないため、関数へのポインターはそれを指すことはできません。

ケース 3 (正しいコード):

    #include <stdio.h>

    int function(int _a){return ((_a)*2);};

    int main () {
        int (*func)(int) = function;
        func(7);
    ...

}

今回はうまくいきましたか?

4

2 に答える 2

4

この線はあなたが思っているものではありません。

 int (*func)(int) = 0;

これは、署名を持つ関数へのポインターへの変数 (func と呼ばれる) であり、int somename(int)0 に設定しています。

理解を深めるために、次のことを考慮してください。

int myfunction(int a) { return 5;}

次に、これは機能します

 int (*func)(int) = myfunction;
于 2013-03-28T03:38:57.497 に答える
0

int (*func)(int) = 0;手段func関数ポインタiepointer to a functionであるため、ステートメントの最初に ieを(*func)返し、引数として ieを取ります。に代入するとは、関数ポインタが を指すように代入されることを意味します。integerintinteger(int)int (*func)(int)0NULL

于 2013-03-28T03:37:52.457 に答える