函数原型中的函数声明(需要帮助)

时间:2013-04-29 02:13:30

标签: c function prototype

void sortRecords(char* records[], int size, int isGreater(const char rec1[],
                                                        const char rec2[]));
int isGreaterByName(const char record1[], const char record2[]);

int isGreaterByCity(const char record1[], const char record2[]);

int isGreaterByEmail(const char record1[], const char record2[]);

实际上我不知道如何搜索(甚至知道如何调用)..我需要知道如何使用这种类型的函数。

我将这些作为我的功能原型。我需要这个函数的示例用法:)

我试过这个

char eMail[30];
sortRecords(addresses,30,isGreaterByName(eMail,eMail));

但是编译器给了我

In function 'main':|
|69|error: passing argument 3 of 'sortRecords' makes pointer from integer without a cast|
|50|note: expected 'int (*)(const char *, const char *)' but argument is of type 'int'|
||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|
抱歉我的英语不好^。^

1 个答案:

答案 0 :(得分:2)

传递函数指针时,省略括号和参数:

sortRecords(addresses, 30, isGreaterByName);

当你包括括号和参数时,编译器调用函数并将返回值(通常不是指向函数的指针)传递给需要指向函数的函数,从而导致出现问题。

您正在使用现代版的GCC,它会尽力告诉您错误:

expected 'int (*)(const char *, const char *)' but argument is of type 'int'

函数的返回值是int;期望的类型是int (*)(const char *, const char *),这就是你如何将强制转换写入函数指针。最终,你需要学习这种符号。