请教几个小问题
来源:7-13 指向函数的指针与返回指针的函数
avoidOverfitting
2020-10-22
- int(*ptr)(int, float) 和 int(*ptr)(int a, float b) 这两种写法都是合法的吗?一般推荐怎么写呢?
- 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的入口地址。而不仅仅是这个入口地址所代表的内存数据。 - 回调(callback)直接传递函数名也可以吗?或者在形参里接函数的引用, 比如:void func(int a, int(&rA)(int) ) 也可以吗?哪种传递方式比较好,比较通用呢?
问题比较多,多谢啦!
写回答
1回答
-
这里都可以,只要保留函数形式就行,因为没用到a,b; 看你个人喜好;
这里没必要使用(pA)(a) ,没有其他运算,只是调用函数;传参之前我们讲过过程,你可以跟踪下汇编试试。
建议使用函数指针,更易于理解;
032020-10-24
相似问题