“指针函数”与“函数指针”趣解

一、指针函数与函数指针

让我们以入住一家酒店的例子来对比解释。

1、指针函数

指针函数,像是一家酒店的前台服务,当你到达酒店办理入住服务的时候,就调用了“入住服务”函数,这个函数返回的并不是一个具体的房间,而是一张房卡,也就是“入住服务”函数结果指向的内存位置,这张房卡,就是一个指针,你可以凭借房卡找到“入住服务”函数的结果,你的房间。

2、函数指针

函数指针,就像房间里的客户服务单上的服务电话号码,当你需要续房服务的时候,就拨打前台电话(续房服务函数的指针)来调用前台的续房服务,当你需要送餐服务的时候,就拨打餐厅电话(送餐服务函数的指针)来调用送餐服务,当你需要打扫房间的时候,就拨打客房服务的电话(客房服务函数的指针)来调用客房服务。你完全不需要知道服务是如何运作的,只需要知道它的电话号码(函数在内存中的地址)。

二、代码实例

1、指针函数

#include <stdio.h>

// 定义一个指针函数:返回一个指针
int* getRoomCard(int roomNumber) {
    static int room[5] = {101, 102, 103, 104, 105}; // 模拟房间号
    return &room[roomNumber - 1]; // 返回房间号的地址
}

int main() {
    int* roomCard = getRoomCard(3); // 获取房间卡(指针)
    printf("Your room number is: %d\n", *roomCard); // 使用房卡访问房间
    return 0;
}

输出结果:

Your room number is: 103

解释:

getRoomCard是一个指针函数,它返回一个内存地址(房间号),房卡(指针)让你找到房间。

2、函数指针

#include <stdio.h>

// 定义不同的服务函数
void renewRoom() {
    printf("Your room has been renewed.\n");
}

void orderFood() {
    printf("Your food is on the way.\n");
}

void cleanRoom() {
    printf("Your room will be cleaned shortly.\n");
}

// 定义函数指针类型
typedef void (*ServiceFunction)();

int main() {
    // 模拟客户服务单
    ServiceFunction serviceList[3] = {renewRoom, orderFood, cleanRoom};

    printf("Select a service: \n1. Renew Room\n2. Order Food\n3. Clean Room\n");
    int choice;
    scanf("%d", &choice);

    if (choice >= 1 && choice <= 3) {
        serviceList[choice - 1](); // 通过函数指针调用服务
    } else {
        printf("Invalid choice.\n");
    }

    return 0;
}

输入与输出:当输入2时

Select a service: 
1. Renew Room
2. Order Food
3. Clean Room
Your food is on the way.

解释:

ServiceFunction是一个函数指针类型,可以指向任何返回void且无参数的函数。

serviceList是一个函数指针数组,模拟客户服务单上的电话号码。

用户输入选择后,通过函数指针调用相应的服务,就像拨打客户服务电话。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

courniche

鼓励就是动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值