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

如何在不使用STL的情况下使用函数指针数组?代码调用疑问求解

解决函数指针数组的调用问题

咱们来一步步拆解你代码里的问题,然后给出能正常运行的修正方案:

1. 先揪出几个显性错误

  • 拼写失误:你写的OpionA少了一个t,应该是OptionA,这个小错误会直接导致编译器找不到函数,触发编译失败。
  • 数组元素被覆盖:你最后一行代码Functions[0] = Exit;把之前赋值的OptionA给覆盖了!这就导致你调用Functions[0]时,执行的是Exit而不是你想要的OptionA。
  • 调用方式不对:Functions[0];只是获取了数组第0位的函数指针,但没有触发函数调用。函数指针的调用必须加括号,就像普通函数一样:Functions[0]();。
  • 示例函数语法残缺:你给出的OptionA定义里,cout << "OPTION A"; _getch()后面缺了分号和闭合大括号,这也会导致编译报错。

修正后的完整可运行代码

#include <iostream>
#include <conio.h> // 对应_getch()的头文件

// 先声明所有要用到的函数
int OptionA();
int OptionB();
int OptionC();
int Exit();

int main()
{
    // 定义函数指针数组:每个元素指向返回int、无参数的函数
    int(*Functions[4])();
    
    // 给数组赋值,注意不要覆盖目标元素
    Functions[0] = OptionA;
    Functions[1] = OptionB;
    Functions[2] = OptionC;
    Functions[3] = Exit; // 把Exit放到第3位,避免覆盖OptionA
    
    // 正确调用OptionA函数
    Functions[0]();
    
    return 0;
}

// 实现各个函数
int OptionA() 
{ 
    std::cout << "OPTION A"; 
    _getch();
    return 0; // 函数声明返回int,必须返回一个整数值
}

int OptionB()
{
    std::cout << "OPTION B";
    _getch();
    return 0;
}

int OptionC()
{
    std::cout << "OPTION C";
    _getch();
    return 0;
}

int Exit()
{
    std::cout << "Exiting...";
    _getch();
    return 0;
}

核心要点总结

  • 确保函数名拼写完全一致,避免低级编译错误。
  • 给函数指针数组赋值时,注意数组下标不要重复覆盖,否则会丢失之前的函数指针。
  • 调用函数指针必须加上(),否则只是获取指针值,不会执行函数逻辑。
  • 所有声明为返回int的函数,必须在实现中返回一个整数值,否则会产生未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:26:55