函数指针,函数指针数组,指向函数指针数组的指针



函数指针,函数指针数组,指向函数指针数组的指针

首先我是个渣渣,本文仅限参考

1、函数指针:

顾名思义函数指针就是指向函数的指针

函数类型 (*指针变量名)(形参列表); 
“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。  例如: 
int (*f)(int x); 
在定义函数指针时请注意:    
函数指针和它指向的函数的参数个数和类型都应该是—致的; 
函数指针的类型和函数的返回值类型也必须是一致的。

上面我们定义了一个函数指针,但如何来使用它呢?先看如下例子:

#include <stdio.h>
#include <string.h>
char * fun(char * p1,char * p2)
{
int i = 0;
i = strcmp(p1,p2);
if (0 == i)
{
return p1;
}
else
{
return p2;
}
}
int main()
{
char * (*pf)(char * p1,char * p2);
pf = &fun;
(*pf) ("aa","bb");
return 0;
}

我们使用指针的时候,需要通过钥匙(“*”)来取其指向的内存里面的值,函数指针使
用也如此。

2、函数指针数组

char * (*pf[3])(char * p);
这是定义一个函数指针数组。它是一个数组,数组名为pf,数组内存储了3个指向函数的
指针。这些指针指向一些返回值类型为指向字符的指针、参数为一个指向字符的指针的函
数。这念起来似乎有点拗口。不过不要紧,关键是你明白这是一个指针数组,是数组。

那么它如何使用呢,看例子:

#include <stdio.h>
#include <string.h>
char * fun1(char * p)
{
printf("%s\n",p);
return p;
}
char * fun2(char * p)
{
printf("%s\n",p);
return p;
}
char * fun3(char * p)
{
printf("%s\n",p);
return p;
}
int main()
{
char * (*pf[3])(char * p);
pf[0] = fun1; //可以直接用函数名
pf[1] = &fun2; //可以用函数名加上取地址符
pf[2] = &fun3;
pf[0]("fun1");
pf[0]("fun2");
pf[0]("fun3");
return 0;
}

应该很明了了

3、指向函数指针数组的指针

前面详细讨论过数组指针的问题,这里的函数指针数组指针不就是
一个指针嘛。只不过这个指针指向一个数组,这个数组里面存的都是指向函数的指针。仅
此而已。

char * (*(*pf)[3])(char * p);

这个指针指向一个包含了3个元素的数组;这个数字里
面存的是指向函数的指针;这些指针指向一些返回值类型为指向字符的指针、参数为一个
指向字符的指针的函数。


#include <stdio.h>
#include <string.h>
char * fun1(char * p)
{
printf("%s\n",p);
return p;
}
char * fun2(char * p)
{
printf("%s\n",p);
return p;
}
char * fun3(char * p)
{
printf("%s\n",p);
return p;
}
int main()
{
char * (*a[3])(char * p);
char * (*(*pf)[3])(char * p);
pf = &a;
a[0] = fun1;
a[1] = &fun2;
a[2] = &fun3;
pf[0][0]("fun1");
pf[0][1]("fun2");
pf[0][2]("fun3");
return 0;
}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值