【C++】函数指针和指针函数
在 C++ 中,经常会遇到“函数指针”和“指针函数”这两个概念,虽然名字相似,但它们指的是完全不同的内容。下面详细介绍一下它们的区别和用法:
1. 函数指针
定义:
函数指针是指向函数的指针。它存储了函数的地址,可以通过该指针来调用函数。函数指针的声明需要指明函数的返回类型和参数列表,确保类型匹配。
语法示例:
假设有如下函数:
int add(int a, int b) {
return a + b;
}
声明一个指向该函数的指针:
int (*funcPtr)(int, int) = add;
使用函数指针调用函数:
int result = funcPtr(3, 4); // result 为 7
应用场景:
- 回调函数:将函数作为参数传递给其他函数。
- 动态选择函数:根据条件决定调用哪个函数。
2. 指针函数
定义:
指针函数是指返回值为指针的函数。也就是说,函数执行后返回一个指针,而不是一个具体的值。
语法示例:
假设我们有一个函数,返回一个指向 int
类型的指针:
int* getPointer(int& value) {
return &value;
}
调用该函数时,会返回一个 int
指针:
int num = 10;
int* ptr = getPointer(num);
应用场景:
- 当需要从函数返回动态分配的内存地址或某个对象的地址时,常常会用到指针函数。
小结
- 函数指针:是一种指针,指向一个函数,可以通过它调用该函数。
- 指针函数:是一种函数,其返回值是一个指针。
理解这两个概念的关键在于关注“指针”是数据类型还是返回值的类型:
- 如果在声明中指针符号(
*
)紧贴函数名之前,则表示“函数指针”。 - 如果指针符号出现在函数返回类型的位置,则表示“指针函数”。