C声明函数指针

第一次看到声明函数指针的语法时你可能会感到迷惑。不过跟C的很多方面一样,一旦熟悉这种表示法,理解起来就顺理成章了。下面我们声明一个函数指针,该函数接受空参数,返回空值。

void (*foo)();

这个声明很像函数原型声明。如果去掉第一对括号,看起来就像函数foo的原型,它接受void,返回void指针。不过,括号让这个声明变成了一个名为foo的函数指针。星号表示这是个指针。图3-9说明了函数指针声明的各个部分。

enter image description here

图3-9:函数指针声明

注意 使用函数指针时一定要小心,因为C不会检查参数传递是否正确。

下面是声明函数指针的其他一些例子:

int (*f1)(double);         //传入double,返回int                    
void (*f2)(char*);         //传入char指针,没有返回值                      
double* (*f3)(int, int);   //传递两个整数,返回double指针

注意 我们对函数指针在命名约定上的建议是用fptr做前缀。

不要把返回指针的函数和函数指针搞混。下面的f4是一个函数,它返回一个整数指针,而f5是一个返回整数的函数指针,变量f6是一个返回整数指针的函数指针。

int *f4();
int (*f5)();
int* (*f6)();

可以调整这些表达式中的空白符,如下所示:

int* f4();
int (*f5)();

很明显,f4是个返回整数指针的函数,而f5的括号则明确地把表示“指针”的星号和函数名绑定在一起,所以它是个函数指针。

赞(2)

评论 抢沙发

评论前必须登录!

 

C指针