1.指针函数(返回指针的函数)
cpp
#include <stdio.h>
#include <stdlib.h>
// 指针函数:返回一个指向整型的指针
int* createArray(int size) {
int *arr = (int *)malloc(size * sizeof(int)); // 动态分配内存
if (arr == NULL) {
printf("内存分配失败\n");
exit(1);
}
for (int i = 0; i < size; i++) {
arr[i] = i + 1; // 初始化数组
}
return arr; // 返回指针
}
int main() {
int *arr = createArray(5); // 调用指针函数
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // 输出数组内容
}
free(arr); // 释放内存
return 0;
}
2. 函数指针(指向函数的指针)
cpp
#include <stdio.h>
// 定义一个函数
int add(int a, int b) {
return a + b;
}
int main() {
// 定义函数指针
int (*funcPtr)(int, int);
// 将函数地址赋值给函数指针
funcPtr = add;
// 通过函数指针调用函数
int result = funcPtr(3, 5);
printf("3 + 5 = %d\n", result);
return 0;
}
3. 函数指针的高级用法
3.1函数指针作为参数(回调函数)
cpp
#include <stdio.h>
// 回调函数类型
typedef int (*Operation)(int, int);
// 定义一个函数,接受函数指针作为参数
int calculate(int a, int b, Operation op) {
return op(a, b);
}
// 具体操作函数
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int result1 = calculate(10, 5, add); // 传递 add 函数
int result2 = calculate(10, 5, subtract); // 传递 subtract 函数
printf("10 + 5 = %d\n", result1);
printf("10 - 5 = %d\n", result2);
return 0;
}
3.2函数指针数组
cpp
#include <stdio.h>
// 定义几个函数
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
int multiply(int a, int b) { return a * b; }
int main() {
// 定义函数指针数组
int (*funcArray[3])(int, int) = {add, subtract, multiply};
// 通过函数指针数组调用函数
printf("10 + 5 = %d\n", funcArray[0](10, 5));
printf("10 - 5 = %d\n", funcArray[1](10, 5));
printf("10 * 5 = %d\n", funcArray[2](10, 5));
return 0;
}
4. 函数指针与指针函数的区别
特性 | 指针函数 | 函数指针 |
---|---|---|
定义 | 返回值是指针的函数 | 指向函数的指针变量 |
语法 | int* func(int a, int b); |
int (*funcPtr)(int, int); |
用途 | 返回动态分配的内存或数组 | 实现回调、函数表等 |
调用方式 | 直接调用 | 通过指针调用 |
5. 总结
-
指针函数:返回值是指针的函数,通常用于返回动态分配的内存或数组。
-
函数指针:指向函数的指针,用于实现回调、函数表等高级功能。