0

我编写了一个简单的 C 程序来学习函数指针的用法:

#include <stdio.h>

int (*workA) ( char *vA );
int (*workB) ( char *vB );

int main( int argc, char * argv[] )
{
    char *strA = "Hello.";
    char *strB = "Bonjour.";

    int a = workA(strA);
    int b = workB(strB);

    printf("Return value of A = %d, B = %d.\n", a, b);

    return 0;
}

int (*workA)( char *vA )
{
    printf("A: %s\n", vA); // line 20

    return 'A';
}

int (*workB)( char *vB )
{
    printf("B: %s\n", vB); // line 27

    return 'B';
}

海合会抱怨:

test.c:20: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
test.c:27: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

我不知道它有什么问题。任何意见将不胜感激。

4

2 回答 2

2

workAworkB是两个函数的指针。您需要声明将完成工作的实际函数,然后在调用它们之前将它们分配给您的两个指针......

#include <stdio.h>

int (*workA) ( char *vA );
int (*workB) ( char *vB );

int workAFunction( char *vA )
{
    printf("A: %s\n", vA); // line 20

    return 'A';
}

int workBFunction( char *vB )
{
    printf("B: %s\n", vB); // line 27

    return 'B';
}

int main( int argc, char * argv[] )
{
    char *strA = "Hello.";
    char *strB = "Bonjour.";

    workA = workAFunction;
    workB = workBFunction;

    int a = workA(strA);
    int b = workB(strB);

    printf("Return value of A = %d, B = %d.\n", a, b);

    return 0;
}
于 2013-05-06T17:47:09.410 回答
0

当您编写int (*workA) ( char *vA )时,这意味着workA是一个指向返回 int 的函数的指针。workA不是函数

删除周围的括号*workA并简单地编写int (*workA) ( char *vA )使workA函数根据需要返回指向 int 的指针。

工作B也是如此。

你可以使用这个伟大的程序cdecl来简化事情。

于 2013-05-06T18:06:18.367 回答