请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教几个小问题

  1. int(*ptr)(int, float) 和 int(*ptr)(int a, float b) 这两种写法都是合法的吗?一般推荐怎么写呢?
  2. void func(int a, int(*pA)(int) ) {
    pA(a);
    }
    这里为什么是pA(a) 而不是 (pA)(a) 呢?对比pB = a,要取得a这个数的话,就要用 int tmp = *pB;
    个人理解是,这里传递形参时候相当于作了 int (*pA) (int) = callback_func(int); 这样一件事,即是把callback_func(int)的入口地址用一个指针记录下来。而调用的时候,需要让编译器知道callback_func的入口地址。而不仅仅是这个入口地址所代表的内存数据。
  3. 回调(callback)直接传递函数名也可以吗?或者在形参里接函数的引用, 比如:void func(int a, int(&rA)(int) ) 也可以吗?哪种传递方式比较好,比较通用呢?

问题比较多,多谢啦!

正在回答

1回答

  1. 这里都可以,只要保留函数形式就行,因为没用到a,b; 看你个人喜好;

  2. 这里没必要使用(pA)(a) ,没有其他运算,只是调用函数;传参之前我们讲过过程,你可以跟踪下汇编试试。

  3. 建议使用函数指针,更易于理解;

0 回复 有任何疑惑可以回复我~
  • 提问者 avoidOverfitting #1
    谢谢回复!
    关于2,其实我想问的是。这里为什么是pA(a), 而不是(*pA)(a)呢?
    回复 有任何疑惑可以回复我~ 2020-10-23 14:18:33
  • quickzhao 回复 提问者 avoidOverfitting #2
    函数指针比较特别,pA(a)和(*pA)(a)都可以。
    回复 有任何疑惑可以回复我~ 2020-10-23 18:03:00
  • 提问者 avoidOverfitting 回复 quickzhao #3
    好的,谢谢。
    回复 有任何疑惑可以回复我~ 2020-10-24 06:28:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信