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

[复制链接]
6395|53
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 | 显示全部楼层
通过指针直接调用或解引用调用,两者等效。
sesefadou 发表于 2025-10-12 13:01 | 显示全部楼层
和普通指针一样,函数指针也可能为 NULL。在调用前,最好进行检查,这是防御性编程的好习惯。
elsaflower 发表于 2025-10-12 14:51 | 显示全部楼层
函数指针就是一个指向函数的指针。
V853 发表于 2025-10-13 20:04 | 显示全部楼层
全局函数像村里的公告板,任何人路过都能看到信息,所以能在多个文件里被找到和用上。
不想打补丁 发表于 2025-10-13 22:19 | 显示全部楼层
函数指针像指向具体函数的“指针”,在编程中用于实现回调,让函数执行时机由调用者控制。
updownq 发表于 2025-10-14 12:43 | 显示全部楼层
回调函数 (Callback Function) - 最主要的用途
这是函数指针最经典的应用。一个函数(通常是一个通用库函数)可以接受另一个函数作为参数,并在需要的时候 “回调” 这个函数。
iyoum 发表于 2025-10-14 14:30 | 显示全部楼层
在某些架构上,函数地址和数据地址的存储方式或宽度可能不同。将函数指针强制转换为 void* 或反之,是未定义行为,非常危险,应该避免。
jkl21 发表于 2025-10-14 17:06 | 显示全部楼层
变量在内存中有一个地址,我们可以用指针来存储这个地址。同样,函数在编译后,其代码也会被加载到内存中,它也有一个入口地址。函数指针存储的就是这个函数的入口地址。
tabmone 发表于 2025-10-14 19:18 | 显示全部楼层
函数指针调用可能引入间接寻址开销,在实时系统中需评估是否满足时序要求。
lzbf 发表于 2025-10-14 21:01 | 显示全部楼层
函数指针就是一个指向函数的指针变量。
zephyr9 发表于 2025-10-15 16:31 | 显示全部楼层
可以,但函数指针指向的是函数的签名(参数类型和返回类型),不同签名的函数指针不能直接指向。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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