1

最初に宣言があります

char (*x)(int field);
char yes_or_no(int);
char yes_or_no(int field)
{
    if(field==1)
    return 'y';
    else
    return 'n';
}

x=&yes_or_no;

printf("Now we can call this function by using the pointer *x by using (*x)(1),\nwhich gives us: \n'%c'\n", (*x)(1));

これは正しく機能しますが、今は何かをしなければなりません

char *y(int field);

関数の宣言はどれですか、または宣言である可能性がありますか?この最後のステートメント/宣言で「何か」を行うにはどうすればよいですか?

敬具。

4

2 に答える 2

1
char (*x)(int field);

関数変数を宣言しx、を返しcharます。

char * y(int field);

y()を返す関数を宣言しますchar *

()2番目の宣言で欠落している角かっこのペアに注意してください。

seocndの場合の関数変数は次のように宣言されます。

char * (*yvar)(int field);
于 2012-11-07T11:55:23.337 に答える
0

関数ポインタのタイプは次のとおりです。

char *(*x) (int);

宣言:

char *y(int field);

単項演算子&は関数のアドレスを持っている必要はないことに注意してください。例:

#include <stdio.h>

const char *(*x) (int);
const char *yes_or_no(int field);

const char *yes_or_no(int field)
{
    if (field == 1)
        return "y";
    else
        return "n";
}

int main(void)
{
    x = yes_or_no;
    printf("'%s'\n", x(1));
    return 0;
}
于 2012-11-07T11:54:48.863 に答える