打印
[产品应用]

如何用函数指针调用函数?

[复制链接]
523|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AdaMaYun|  楼主 | 2024-4-7 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


给大家举一个例子:

int Func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = Func;          /*将Func函数的首地址赋给指针变量p*/
p = &Func;          /*将Func函数的首地址赋给指针变量p*/


赋值时函数 Func 不带括号,也不带参数。由于函数名 Func 代表函数的首地址,因此经过赋值以后,指针变量 p 就指向函数 Func() 代码的首地址了。


下面来写一个程序,看了这个程序你们就明白函数指针怎么使用了:
#include <stdio.h>
int Max(int, int);  //函数声明
int main(void)
{
    int(*p)(int, int);  //定义一个函数指针
    int a, b, c;
    p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
    printf("please enter a and b:");
    scanf("%d%d", &a, &b);
    c = (*p)(a, b);  //通过函数指针调用Max函数
    printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
    return 0;
}
int Max(int x, int y)  //定义Max函数
{
    int z;
    if (x > y)
    {
        z = x;
    }
    else
    {
        z = y;
    }
    return z;
}

特别注意的是,因为函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。

p = Max可以改成 p = &Max
c = (*p)(a, b) 可以改成 c = p(a, b)

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 13:21 | 只看该作者
函数指针的调用其实还是对地址的调用

使用特权

评论回复
板凳
szt1993| | 2024-4-10 13:52 | 只看该作者
函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。

使用特权

评论回复
评论
forgot 2024-4-17 08:52 回复TA
C语言指针 
地板
小夏天的大西瓜| | 2024-4-10 13:59 | 只看该作者
其实指针而言*和&理解清楚就没什么大问题

使用特权

评论回复
5
jf101| | 2024-4-14 14:43 | 只看该作者
指针就是寻找地址的一个工具

使用特权

评论回复
6
小小蚂蚁举千斤| | 2024-4-15 09:58 | 只看该作者
用函数指针调用函数非常实用方便

使用特权

评论回复
7
OKAKAKO| | 2024-4-19 18:00 | 只看该作者
函数名本身就可以表示该函数地址,指针还是非常方便的

使用特权

评论回复
8
星辰大海不退缩| | 2024-4-21 12:58 | 只看该作者
函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

240

主题

1848

帖子

3

粉丝