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语言的编程更加灵活。