1. 函数指针
函数指针是指向函数的指针。它保存了函数的地址,可以通过它来调用函数。函数指针通常用于实现回调函数、函数数组等。
1.1 定义和使用
- 定义:函数指针的定义包括函数的返回类型、参数类型和参数顺序。
- 赋值:可以将一个函数的地址赋值给函数指针。
- 调用:通过函数指针可以调用函数。
1.2 示例
#include <iostream>
// 定义一个函数
int add(int a, int b) {
return a + b;
}
// 定义函数指针类型
typedef int (*funcPtr)(int, int);
int main() {
// 声明一个函数指针并赋值
funcPtr ptr = &add;
// 使用函数指针调用函数
int result = ptr(3, 4); // 相当于调用 add(3, 4)
std::cout << "Result: " << result << std::endl; // 输出: Result: 7
return 0;
}
1.3 语法解释
typedef int (*funcPtr)(int, int);
:定义了一个函数指针类型funcPtr
,指向返回int
类型,且接受两个int
类型参数的函数。funcPtr ptr = &add;
:声明一个函数指针ptr
并将add
函数的地址赋值给它。ptr(3, 4);
:通过函数指针调用add
函数。
2. 指针函数
指针函数是一个返回指针的函数。它们的主要特点是返回值类型是指针类型。指针函数常用于返回数组或动态分配的内存的地址。
2.1 定义和使用
- 定义:指针函数的定义包括返回值是一个指针,通常在函数名前使用返回类型指针。
- 调用:调用指针函数时,需要处理返回的指针,通常用于指向数组或动态分配的内存。
2.2 示例
#include <iostream>
// 定义一个指针函数,返回指向整数的指针
int* getArray() {
static int arr[3] = {1, 2, 3};
return arr;
}
int main() {
// 调用指针函数并获取返回的指针
int* ptr = getArray();
// 输出数组的内容
for (int i = 0; i < 3; ++i) {
std::cout << ptr[i] << " "; // 输出: 1 2 3
}
return 0;
}
2.3 语法解释
int* getArray();
:定义一个返回指向int
类型指针的函数getArray
。int* ptr = getArray();
:调用指针函数getArray
并获取返回的指针。ptr[i]
:通过指针ptr
访问数组元素。
3. 区别总结
- 函数指针:
- 定义:指向函数的指针,保存函数地址。
- 用途:调用函数、回调函数、函数数组。
- 示例:
typedef int (*funcPtr)(int, int);
- 指针函数:
- 定义:返回指针的函数,返回值是一个指针。
- 用途:返回数组地址、动态分配内存的地址。
- 示例:
int* getArray();