1. 概述
函数指针和指针函数是两个不同的概念。
函数指针是指一个指针变量,该指针变量存储了一个函数的地址。通过函数指针可以实现动态调用函数,根据需要在程序运行时指定要调用的函数。函数指针的声明方式为:返回类型 (*指针变量名)(参数列表)。
指针函数则是指一个返回指针的函数,即函数的返回值是一个指针类型。指针函数的声明方式为:返回类型 (*函数名)(参数列表)。
因此,函数指针和指针函数的区别在于它们的返回值类型和声明方式不同。函数指针存储了一个函数的地址,可以用来动态调用函数;指针函数则是一个返回指针的函数,可以返回指向某个数据类型的指针。
2. 案例分析
指针函数
示例:(C++)
#include <iostream>
using namespace std;
int* findMax(int* arr, int n) {
if (n <= 0) {
return nullptr;
}
int* max = arr;
for (int i = 1; i < n; i++) {
if (arr[i] > *max) {
max = &arr[i];
}
}
return max;
}
int main() {
int arr[] = { 10, 23, 5, 17, 25 };
int* maxPtr = findMax(arr, 5);
cout << maxPtr << endl;
cout << *maxPtr << endl;
if (maxPtr != nullptr) {
cout << "Max value is " << *maxPtr << endl;
}
else {
cout << "Array is empty." << endl;
}
return 0;
}
在这个例子中,定义了一个指针函数findMax()
,用于查找数组中的最大值,并返回指向该最大值的指针。在函数中,先判断数组是否为空,如果为空则返回nullptr
。接着定义一个指针变量max
,并将其初始化为数组的第一个元素的地址。使用循环遍历数组,如果遇到比max
指向的值更大的元素,则将max
指向该元素的地址。最后返回max
指向的地址,即最大值的地址。
在main()
函数中,调用findMax()
函数查找数组中的最大值,并将返回的指针赋给maxPtr
指针变量。如果返回的指针不为nullptr
,则输出最大值。否则输出数组为空的提示信息。
输出结果:
可以发现,maxPtr
为指针,其指向数组arr
中的最大元素。
函数指针
示例:(C++)
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*operation)(int, int);
int result;
operation = &add;
result = operation(4, 2);
cout << "4 + 2 = " << result << endl;
operation = &subtract;
result = operation(4, 2);
cout << "4 - 2 = " << result << endl;
return 0;
}
在这个例子中,定义了两个函数add()
和subtract()
,它们分别实现加法和减法运算。接下来定义了一个函数指针变量operation
,用于存储函数的地址。通过赋值操作将函数地址分别赋给operation
,然后通过函数指针调用函数并计算结果,最后输出结果。
输出结果: