You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在被指向函数执行过程中修改函数指针是否合法?

函数指针在指向函数执行期间修改的合法性与实现方案

一、合法性分析

你贴的代码里,在foo执行期间修改函数指针fun的操作是完全合法的。

函数指针本质就是存储函数地址的变量,这里fun是全局变量,在foo内部修改它仅仅是改变这个变量的取值,完全不会影响当前正在执行的foo函数流程——foo已经启动执行,这次调用的逻辑不会因为指针的变化而中断或跳转,修改只会作用于后续的函数调用。

运行你提供的代码,输出结果会是:

foo
boo

第一次调用(*fun)()时执行foo,foo内部把fun改成指向boo;第二次调用就会执行boo,和预期一致。

二、满足循环需求的实现方案

针对你“循环执行函数指针,初始调用foo,当foo满足某个条件时一次性修改指针,之后每次都执行boo”的需求,直接加条件判断逻辑就能实现,示例代码如下:

#include <iostream>
using fun_p = void (*)();

void foo();
void boo();

fun_p fun = &foo;
// 这里用调用次数作为判断条件,你可以换成自己的业务逻辑,比如状态标志、外部输入等
int call_count = 0;

void foo() {
    std::cout << "foo\n";
    call_count++;
    // 假设条件是foo被调用2次后切换到boo
    if (call_count == 2) {
        fun = &boo;
        std::cout << "已切换为执行boo\n";
    }
}

void boo() {
    std::cout << "boo\n";
}

int main() {
    // 循环调用10次做示例
    for (int i = 0; i < 10; i++) {
        (*fun)();
    }
    return 0;
}

关键说明:

  • 用全局变量call_count记录foo的调用次数,作为切换条件(你可以根据实际需求替换成任意判断逻辑,比如某个布尔状态、外部参数等)
  • 在foo内部检查条件,一旦满足就把fun指向boo,后续循环调用会自动执行boo
  • 循环里每次调用(*fun)(),都会根据当前fun的指向执行对应函数

运行这段代码,前2次会输出foo,第2次调用foo时触发切换,之后8次都会输出boo,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Artur Pyszczuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:01:22