函数指针和指针函数
函数指针
函数指针是一个指针,指向一个函数,这个被指向的函数的返回值和参数列表必须和 指针定义时的返回值和参数列表相同。
例如下面的代码:
#include<stdio.h>
void pp()
{
printf("this is function pp!n");
}
void ppp()
{
printf("this is function ppp!n");
}
int main(void)
{
void (*p)();
p = pp;
p();
p = ppp;
p();
return 0;
}
就定义了一个指向 返回值为void,参数列表为空的函数指针,并且定义了两个函数pp和ppp,然后分别将p指向这两个函数并且调用函数。这就是函数指针。*p周围的括号一定不能省略,否则会错。使用()之后p先与*结合,所以p是一个指针。
注意在上面赋值的时候是直接把函数名赋值给指针,我们都知道指针指向的是地址,而前面指向变量的指针需要在变量前面加一个&这个取地址的符号,而函数指针指向函数的时候不需要,这说明其实函数名就是一个地址,
printf("%pn",pp);
printf("%pn",&pp);
我们可以再试试打印上面的两个值,一个是打印pp的值,一个是打印pp的地址,我们可以发现这两个值都是一样的,也就是说无论是pp还是&pp都是代表地址,所以前面指针的赋值不仅可以是p = pp;也可以是p = &pp;当然我们一般都是使用p = pp;少一个符号岂不方便?
指针函数
而指针函数则是一个函数,这个函数的返回值是一个指针。
例如int* f(int a, int b);
就是一个指针函数的定义,这个函数的返回值必须是一个int型的指针。
()的优先级高于*,所以f先与()结合,f是一个函数。
函数指针数组
顾名思义,这是一个数组,数组中的每一个元素都是一个函数指针,而函数指针是一个指向函数的指针。数组中所有元素的类型必须相同,所以数组中所有的函数指针都必须指向同类型的函数。
int (*p[10])(int a, int b);
最后
以上就是瘦瘦乐曲最近收集整理的关于3、函数指针和指针函数函数指针和指针函数的全部内容,更多相关3、函数指针和指针函数函数指针和指针函数内容请搜索靠谱客的其他文章。
发表评论 取消回复