函数指针(函数指针有什么用)

今天给各位分享函数指针的函数函数知识,其中也会对函数指针有什么用进行解释,指针指针如果能碰巧解决你现在面临的有什用问题,别忘了关注本站,函数函数现在开始吧!指针指针

函数指针的定义是什么

函数指针的定义是什么

顾名思义,函数指针就是函数函数函数的指针。它是指针指针一个指针,指向一个函数。有什用看例子:

A),函数函数char * (*fun1)(char * p1,指针指针char * p2);

B),char * *fun2(char * p1,有什用char * p2);

C),char * fun3(char * p1,函数函数char * p2);

数组参数等效的指针参数

数组的数组:char a[3][4] 数组的指针:char (*p)[10]

指针数组: char *a[5] 指针的指针:char **p

看看上面三个表达式分别是什么意思?

C):这很容易,fun3 是指针指针函数名,p1,有什用p2 是参数,其类型为char *型,函数的`返回值为char *类型。

B):也很简单,与C)表达式相比,唯一不同的就是函数的返回值类型为char**,是个二级指针。

A):fun1 是函数名吗?回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰:

int (*)[10] p;

再看看A)表达式与这里何其相似!明白了吧。这里fun1 不是什么函数名,而是一个指针变量,它指向一个函数。这个函数有两个指针类型的参数,函数的返回值也是一个指针。

同样,我们把这个表达式改写一下:char * (*)(char * p1,char * p2) fun1; 这样子是不是好看一些呢?只可惜编译器不这么想

;

函数指针如何定义?

关于函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。

第一种,标准方法:

分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。 

根据分析:首先说明是一个数组:数组名[]

其次,要说明其元素的数据类型指针:*数组名[].

再次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式扩起来,根据圆括号和方括号的结合方向,那么 *数组名[]() 说明的是什么呢?是元素返回值类型为指针的函数数组。有这样的函数数祖吗?不知道。所以必须括起来,以保证数组的每一个元素是指针。

第二种,蒙骗法:

尽管函数不是变量,但它在内存中仍有其物理地址,该地址能够赋给指针变量。获取函数方法是:用不带有括号和参数的函数名得到。

函数名相当于一个指向其函数入口指针常量。 那么既然函数名是一个指针常量,那么就可以对其进行一些相应的处理,如强制类型转换。

那么我们就可以把这个地址放在一个整形指针数组中,然后作为函数指针调用即可。

(一) 用函数指针变量调用函数

可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。用简单的数值比较为例:

1 #include stdio.h

2 #include stdlib.h

3

4  int main()

5 {

6     int max(int,int);

7     int (*p)(int,int);

8     int a,b,c;

9     p = max;

10     scanf("%d,%d",a,b);

11     c = (*p)(a,b);

12     printf("a=%d,b=%d,max=%d\n",a,b,c);

13     return 0;

14 }

15

16 int max(int x,int y)

17 {

18     int z;

19     if(xy) z = x;

20     else z = y;

21     return(z);

22 }

什么是函数指针?

函数指针,顾名思义,就是指向一个函数的指针。

例:

#include

void

say_hello(const

char

*str)

{

printf("Hello

%s\n",

str);

}

int

main(void)

{

void

(*f)(const

char

*)

=

say_hello;

f("Guys");

return

0;

}

f为指向函数say_hello函数的指针;

其中f("Guys");

可换为:(*f)("Guys");

函数指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于函数指针有什么用、函数指针的信息别忘了在本站进行查找喔。

留学
上一篇:炒面面包(炒面面包是什么)
下一篇:常熬夜的人身体代价(常熬夜的人身体代价三并带8的意思)