C++函数指针和函数指针数组

abacabcc 2017-11-18 10:09:29
           #include <stdio.h>

int aa(int a)
{
printf("%d",a);
return a;
}


int main1()
{
int (*pa)(int) = &aa;
pa(5);
}

int main2()
{
int (*pa)(int) = aa;
pa(5);
}


这段代码为什么不论用main1还是main2 都能编译通过 输出结果也是相同的,可是百度函数指针用法只有main1是正确的
...全文
191 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2017-11-19
  • 打赏
  • 举报
回复
对函数名来说,三位一体。既&aa,aa,*aa是一样的。
abacabcc 2017-11-18
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;

class Widget
{
public:
#if 1
    Widget()
    {
        pa[0] = &f;
        pa[1] = &g;
        pa[2] = &i;
        pa[3] = &j;

    }
#endif
    void select(int idx)
    {
        //类内的函数指针只记录函数的偏移量
        (this->*pa[idx])();
    }
private:
    void f() {cout <<"void f()" << endl;}
    void g() {cout <<"void g()" << endl;}
    void i() {cout <<"void i()" << endl;}
    void j() {cout <<"void j()" << endl;}

    enum {cnt = 4};//const int 4;不行
    void (Widget::*pa[cnt])() = {f,g,i,j};
};
int main()
{
    Widget w;
    w.select(2);
    return 0;
}

这段代码中 if 到endif中间这一段去了有影响吗
 void (Widget::*pa[cnt])() = {f,g,i,j};//这行改成 void (Widget::*pa[cnt])() = {&f,&g,&i,&j};可以吗

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧