C语言内功强化之函数
函数的3大属性:输入参数、函数名、返回值
C 语言中,函数名本身就是 “函数入口地址”,在下面的函数里面使用指针p指向printf的函数入口地址,这里通过间接调用访问,运行期间通过指针地址找到函数
#include "stdio.h"int (*p) (const char *,...);void fun(void)
{// printf("funcall\r\n");p = printf;p("funcall\r\n");
}int main(void)
{fun();return 0;
}高级用法
对于函数指针的typedef,是把变量名替换为类型名称,格式看起来特殊
因为函数名就是可以访问函数的地址,所以是用指针*
类似这个应用:
#include "stdio.h"typedef int(*PrintFunC)(const char*,...)
PrintFunC p;void fun(void)
{// printf("funcall\r\n");p = printf;p("funcall\r\n");
}int main(void)
{fun();return 0;
}
#include "stdio.h"// 1. 基础用法:给简单类型起别名(嵌入式常用)
typedef char s8;    // 8位有符号字符
typedef int s32;    // 32位有符号整数// 2. 进阶用法:给函数指针类型起别名(处理传感器数据的函数指针)
typedef s32 (*SensorFunc)(s8 sensor_id, s32 *data);  // 函数指针类型别名// 自定义一个“读取温度传感器”的函数(匹配 SensorFunc 类型)
s32 read_temp(s8 id, s32 *data) {*data = 25;  // 模拟读取到25℃printf("传感器%d:温度=%d℃\n", id, *data);return 0;  // 返回0表示成功
}int main(void) {s32 temp_data;          // 用别名 s32 定义变量SensorFunc get_sensor;  // 用别名 SensorFunc 定义函数指针get_sensor = read_temp; // 函数指针指向“读取温度”的函数get_sensor(1, &temp_data);  // 调用函数指针return 0;
}