食品网站建设规划网站域名注册
指针函数和函数指针
- 1. 概述
- 2. 案例分析
- 指针函数
- 函数指针
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
,然后通过函数指针调用函数并计算结果,最后输出结果。
输出结果: