Sul*_*223 5 c++ pointers reference
我正在简单地阅读C++,并且遇到了一段我不理解的参考和指针代码.
代码是void (* fn) (int& a, int* b) = add;.据我所知,它不会影响程序本身,但想知道这段代码的作用.
#include <iostream>
using namespace std;
void add (int& a, int* b)
{
cout << "Total: " << (a+ *b) << endl;
}
int main()
{
int num = 100, sum = 200;
int rNum = num;
int* ptr = #
void (* fn) (int& a, int* b) = add;
cout << "reference: " << rNum << endl;
cout << "pointer: " << *ptr << endl;
ptr = ∑
cout << "pointer now: " << *ptr << endl;
add(rNum, ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 11
使用螺旋规则:
+----------------------+
| +--+ |
| ^ | |
void (* fn ) (int& a, int* b) = add;
^ | | |
| +-----+ |
+---------------------------+
Run Code Online (Sandbox Code Playgroud)
fn是一个指向函数的指针,该函数接受两个参数(int&命名a和int*命名b)并返回void.使用free函数初始化函数指针add.
那么你的代码在哪里:
add(rNum, ptr);
Run Code Online (Sandbox Code Playgroud)
这可以等效地替换为:
fn(rNum, ptr);
Run Code Online (Sandbox Code Playgroud)
fn是一个指向函数的指针,从左到右,a int&和a int*,它不返回任何东西.
您分配的功能add来fn.
您可以add通过指针调用该函数,使用与您使用时完全相同的语法add.
该技术的一个用途是在回调函数的建模中.例如,qsort需要一个用于排序谓词的回调函数.函数指针在C中比在C++中更常见,在C++中还有其他技术,如函数对象,模板,lambda甚至std::function.