[其它应用] 函数指针的用法

[复制链接]
6961|53
一点点晚风 发表于 2025-9-25 17:20 | 显示全部楼层
函数指针存储函数地址,可像变量一样传递、赋值。声明格式如int (*func_ptr)(int, int),指向返回 int、参数为两 int 的函数。用法:func_ptr = &add; 赋值,(*func_ptr)(a,b) 调用。常用于回调函数、状态机设计,实现代码解耦,在嵌入式中方便多模块交互和动态逻辑切换。
旧时光放映机 发表于 2025-9-30 18:41 | 显示全部楼层
我有个疑问,函数指针可以指向不同类型的函数吗?
cemaj 发表于 2025-10-6 21:06 | 显示全部楼层
返回类型 (*指针变量名)(参数列表)
nt (*funcPtr)(int, float);
funcPtr 是一个指向 "接收一个 int 和一个 float 参数并返回 int 的函数" 的指针。
mmbs 发表于 2025-10-7 20:36 | 显示全部楼层
作为参数传递              
cashrwood 发表于 2025-10-7 21:20 | 显示全部楼层
全局函数具有外部链接性,可在多文件中访问
janewood 发表于 2025-10-7 22:49 | 显示全部楼层
C语言不支持重载,不同函数即使名称相同只要参数不同就会被视为不同函数
updownq 发表于 2025-10-8 08:56 | 显示全部楼层
函数指针是实现回调的核心机制              
zerorobert 发表于 2025-10-8 16:18 | 显示全部楼层
声明:返回类型 (*名)(参数);
赋值:指针 = 函数名;
调用:指针(参数);
cemaj 发表于 2025-10-8 18:41 | 显示全部楼层
不要让函数指针指向一个在某个作用域内定义的局部函数
belindagraham 发表于 2025-10-8 21:00 | 显示全部楼层
掌握函数指针是从C/C++初学者迈向进阶的关键一步。
pmp 发表于 2025-10-10 10:23 | 显示全部楼层
返回类型 (*指针名)(参数列表);
rosemoore 发表于 2025-10-10 12:25 | 显示全部楼层
C++类成员函数指针需要额外存储对象实例
jonas222 发表于 2025-10-10 14:24 | 显示全部楼层
普通指针(如 int*)存储的是数据的内存地址。
函数指针存储的是函数代码的起始内存地址。
lzbf 发表于 2025-10-10 16:19 | 显示全部楼层
#include <stdlib.h>
#include <stdio.h>

// 比较函数的格式是固定的,由 qsort 规定
int compare_ints(const void* a, const void* b) {
    int arg1 = *(const int*)a;
    int arg2 = *(const int*)b;
    return (arg1 > arg2) - (arg1 < arg2); // 简洁的写法
}

int main() {
    int numbers[] = { -2, 99, 0, -743, 53, 2 };
    int n = sizeof(numbers) / sizeof(numbers[0]);

    // 调用 qsort,并传入我们的比较函数指针
    qsort(numbers, n, sizeof(int), compare_ints);

    for (int i = 0; i < n; i++) {
        printf("%d ", numbers[i]);
    }
    // 输出: -743 -2 0 2 53 99
}
uytyu 发表于 2025-10-11 10:46 | 显示全部楼层
赋值给函数指针的函数,其返回类型和参数列表必须与函数指针的定义完全匹配。
burgessmaggie 发表于 2025-10-11 12:39 | 显示全部楼层
int (*p_func)(int, int);
hilahope 发表于 2025-10-11 14:28 | 显示全部楼层
函数指针的声明需严格匹配目标函数的签名
sheflynn 发表于 2025-10-11 16:14 | 显示全部楼层
不匹配的赋值和调用是未定义行为,可能导致程序崩溃或产生奇怪的结果。
albertaabbot 发表于 2025-10-11 18:50 | 显示全部楼层
对传入的函数指针进行 NULL 检查
nomomy 发表于 2025-10-11 20:40 | 显示全部楼层
通过指针直接调用或解引用调用,两者等效。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0