以少许内容带你理解指针函数和函数指针

1.指针函数和函数指针的定义

        函数指针:函数的返回值是任意类型的指针

                体现形式如下:

此处定义了一个函数指针,目的是将"hello world"这个字符串赋给str,并将这个赋值后字符串的首地址返回。

char str3[128];//此处的数组一定要声明为全局变量,若声明在FUN111函数中,则最后输出的ooo.cmd会是空指针


/*
    函数指针:的体现形式
*/
char *FUN111(void)
{
    memcpy(str3,"hello world",strlen("hello world"));
    return str3;
}

        指针函数:指向函数的指针变量

                体现形式:

/*
    此处以一个加法运算的函数进行演示
*/
float fun_pointer_s(int a,float b)
{
    return a+b;
}

float (*fun)(int,float);//定义函数指针


fun = &fun_pointer_s;//此处将加法运算函数对应的函数指针赋值给指针函数,此处的指针函数作为变量存储加法运算的函数

2.以实际的代码理解指针函数和函数指针

实例代码如下:

/*
    文件作用:
        区分函数指针与指针函数的区别,结合下发实例理解内容
    author:
        小张同学
    date:
        2025年4月12日
    version:
        1.0
    说明:
        1. 函数指针:指向函数的指针变量
        2. 指针函数:返回值为指针类型的函数

*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char str3[128];

/*
    定义一个函数
*/
float fun_pointer_s(int a,float b)
{
    return a+b;
}

/*
    函数作用:
        了解指针函数的作用

    指针函数:指的是函数的返回值是一个任意类型的指针
    函数功能:
        将"hello world"复制到str3中,并返回其首地址
    函数参数:
        无
    返回值:
        char *类型的指针
*/
char *FUN111(void)
{
    memcpy(str3,"hello world",strlen("hello world"));
    return str3;
}

/*次数函数指针的声明结合结构体使用,方便各位理解回调函数的实现*/
typedef struct test
{
    float (*fun1)(int,float);// 声明函数指针
    int num;
    float fnum;
    float sum;
    char *cmd;
}fun_pointer;

fun_pointer ooo;


int main(int argc, char const *argv[])
{
    ooo.fun1 = &fun_pointer_s; // 将函数的地址赋值给函数指针
    //ooo.fun1 = fun_pointer_s; //此处函数指针的取值这两处测试的均可以实现回调函数的效果,已验证

    ooo.sum = ooo.fun1(1,2.0); // 调用函数指针
    printf("ooo.sum = %.2f\n",ooo.sum); // 输出结果


    ooo.cmd = FUN111(); // 调用指针函数
    printf("ooo.cmd = %s\n",ooo.cmd); // 输出结果
    return 0;
}



下发是上述示例的效果输出:

3.总结

        指针函数常用于拼接想要的指定字符串,函数指针可用于回调函数的实现,且函数指针增强了C语言编程的多样性,即对应了C++语言编程特性中的多态性,使C语言的编程更加灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值