700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言指针怎么指向函数 C语言指针---指向函数的指针

c语言指针怎么指向函数 C语言指针---指向函数的指针

时间:2023-05-03 09:47:48

相关推荐

c语言指针怎么指向函数 C语言指针---指向函数的指针

C语言指针—指向函数的指针

1.什么是函数指针

在程序中定义了一个函数,在编译时,系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。

一般形式:

类型名 (*指针变量名)(函数参数表列)

例如:

int (*p)(int int)

定义p是一个指向函数的指针变量,它可以指向函数的类型为整型且与两个整型参数的函数。p的类型用int(*)(int,int)表示。

2.函数指针变量的应用

(1)用函数求整数a和b的大者

#include

int max(int x,int y)

{

int z;

if(x>y)

{

z=x;

}

else

{

z=y;

}

return (z);

}

int main()

{

int (*p)(int ,int); //定义指向函数的指针变量

int a,b,c;

p=max; //使p指向max函数

printf("please enter a and b:\n");

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

c=(*p)(a,b); //通过指针变量调用max函数

printf("a=%d\nb=%d\nmax=%d\n",a,b,c);

return 0;

}

程序分析:

“int()p(int int);”用来定义一个指向函数的指针变量。注意(*p)两侧的括号不能省略,表示p先与*结合,是指针变量,然后再与后面的()结合,()表示函数,即该指针变量不是指向一般的变量,而是指向函数。

如果写成了“int p(int int)”,由于()优先级高于*,它相当于“int*(p(int int)),就成为声明一个p函数了

赋值语句“p=max”的作用是将函数的入口地址赋给指针变量p,p就是指向函数max的地址。即c=(*p)(a,b);和c=max(a,b)等价。

(2)利用一个函数实现多个函数的功能

问题:有两个整数a和b用户输入1,2或3。如输入1,,程序就给出a和b中的大者;如输入2,程序就给出两者中的小者;如输入3,程序就给出a和b的和。

#include

int main()

{

int fun(int x,int y,int (*p)(int,int));

int max(int,int);

int min(int,int);

int add(int,int);

int a=34,b=-21,n;

printf("please choose 1,2or3: ");

scanf("%d",&n);

if(n==1)

{

fun(a,b,max);

}

if(n==2)

{

fun(a,b,min);

}

if(n==3)

{

fun(a,b,add);

}

return 0;

}

int fun(int x,int y,int(*p)(int,int)) //定义fun函数

{

int result;

result=(*p)(x,y);

printf("%d\n",result); //输出结果

}

int max(int x,int y) //定义max函数

{

int z;

if(x>y)

{

z=x;

}

else

{

z=y;

}

printf("max=");

return (z); //输出两者中的大值

}

int min(int x,int y) //定义min 函数

{

int z;

if(x>y)

{

z=y;

}

else

{

z=x;

}

printf("min=");

return(z); //输出两者中的小值

}

int add(int x,int y) //定义add函数

{

int z;

z=x+y;

printf("min=");

return(z); //返回值是两数中之和

}

运行结果:

若输入1

please choose 1,2or3: 1

max=34

若输入2

please choose 1,2or3: 2

min=-21

若输入3

please choose 1,2or3: 3

add=13

程序分析:

在定义fun函数时函数首部用“int(*p)(int,int)”声明形参p是指向函数的指针。调用fun函数时,函数名min,max,add,作为实参将其入口地址传送给fun函数中的形参p。

3.指针变量使用说明

(1)定义指针变量只能指向定义时指向的函数。如前面的“int (*p)(int ,int );“表示指针变量p只能指向返回值为整型且有两个整型参数的函数。然后把那个函数名赋给函数名即可。

(2)如果要用指针点调用函数,必须使指针变量指向该函数。如:

p=max;

这就把max函数的地址赋给指针变量p.

(3)再给函数指针变量赋值时,只需给出函数名而不必给出参数。如:

p=max;

因为只是赋地址,若“p=max(a,b)”为函数的调用,故错误。

(4)用函数指针变量调用函数时,只需将(*p)代替函数名即可(p为指针变量名),

在(*p)之后的括号中根据需要写上实参。例如:

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

(5)对指向函数的指针不能进行算术运算,如:p+n,p++。

4.指向函数的指针应用条件:

通常通过编写一个通用的函数来实现各种专用的功能。例如第二个程序中通过输入一个数字,然后通过输入不同的值调用不同的函数,实现不同的功能。当然也可以用if语句或switch语句进行判断,调用不同的函数。但是用指针变量显得更专业。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。