【C语言】指针函数与函数指针

指针函数:

首先它是一个函数,从中文语法上理解,指针是用来修饰这个函数的,这个函数的返回值是一个指针

例如:

int result;

int *fcn(int x,int y)
{
    result = x + y;

    return &result;
}

上述函数中在调用该函数时会返回一个int类型的指针,

用处:

在C语言中函数只允许return回一个变量,当需要一次返回多个结果时,就可以把结果放在一个数组或者一个结构体中,在函数最后返回这个数组或者结构体的指针,做到一次返回多个计算结果,且不违背C语言一次只能返回一个变量的规则,因为指针也是一个变量。

函数指针:

首先它是一个指针,从中文语法上理解,函数是用来修饰这个指针的,这个指针指向了一个函数

例如:

int(* fcn)(int x, int y);

这个函数指针的类型是 int(* )(int x, int y),在上述代码中用该类型声明了一个函数指针fcn。

用处:

1.使用函数指针指向另一个函数.

int add(int a,int b)
{
    int c;
    c=a+b;

    return c;
}

假设有一个函数add,那么在使用时就可以使用函数指针fcn指向这个函数:

int main()
{
 int(* fcn)(int x, int y);//定义一个函数指针变量fcn

 fcn = &add;
 printf("%d",*fcn(1,2));

 return 0;
}

上面这段代码就是使用fcn指向了求和函数add,打印的时候打印fcn的计算结果实际上就是打印add的计算结果。

2.函数指针可以用在回调函数中。

回调函数是把一个函数作为另一个函数的参数,此时就可以使用函数指针将函数作为参数传递给另一个函数,例如:

typedef int(* fcn_type)(int x,int y);

首先使用typedef将函数指针类型int(* )(int x, int y)定义为fcn_type,此时就可以使用fcn_type去定义一个新的函数指针:

int callback_fcn_1(int x)
{
    int m;
    m = x + 666;

    return m
}

int callback_fcn_2(int x)
{
    int m;
    m = x - 666;

    return m
}

int my_fcn(int x,int y,fcn_type callback)
{
    int c,d;
    c=x+y;

    d=callback(c);
    return d;
}

假设有两个函数,分别是把输入值+666或者-666然后再return

假设现在需要在my_function中对输入参数x,y求和后对求和结果做进一步操作操作

但是不同工程师后续的计算目的不同,编写my_fcn的工程师不确定其他工程师对这个求和结果要做什么操作,所以留出一个函数接口,供大家选择后需要做的操作

如果小明希望把求和结果+666,那就在调用my_function时把第三个参数也就是回调函数写为callback_fcn_1

如果小红希望把求和结果-666,那就在调用my_function时把第三个参数也就是回调函数写为callback_fcn_2

#include <stdio.h>


int main()
{
    my_fcn(1,2,callback_fcn_1);//1+2后的求和结果再+666

    my_fcn(1,2,callback_fcn_2);//1+2后的求和结果再-666

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值