请教几个小问题

来源:7-13 指向函数的指针与返回指针的函数

avoidOverfitting

2020-10-22

  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回答

quickzhao

2020-10-22

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

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

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

0
3
avoidOverfitting
回复
quickzhao
好的,谢谢。
2020-10-24
共3条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程