在C语言的江湖中,函数指针犹如一门深不可测的绝学,掌握它,你将能够游刃有余地处理各种复杂场景。今天,我们将深入探讨函数指针的高级用法,并通过一系列案例,让你领略其无限魅力。本文为高阶篇,适合已经有一定函数指针基础的读者。
一、函数指针深度解析
1. 函数指针数组与指向函数指针数组的指针
在C语言中,不仅可以使用数组存储函数指针,还可以有指向这些数组的指针。
函数指针数组
int (*func_array[10])(int);
指向函数指针数组的指针
int (*(*func_array_ptr)[10])(int);
2. 函数指针作为返回类型
函数可以返回指针,同样地,函数也可以返回函数指针。
int (*func_factory(int param))(int) {
// 根据param返回不同的函数指针
if (param > 0) {
return &positive_func;
} else {
return &negative_func;
}
}
3. 函数指针与qsort
qsort
函数是C标准库中的一个排序函数,它使用函数指针来确定元素间的比较规则。
int compare(const void *a, const void *b) {
// 比较逻辑
}
qsort(array, number_of_elements, size_of_elements, compare);
4. 函数指针与信号处理
在Unix-like系统中,可以使用signal
函数为特定信号设置处理函数。
signal(SIGINT, handle_sigint);
二、高阶函数指针应用案例
案例1:函数指针数组实现多态
#include <stdio.h>
typedef void (*func_ptr_t)(void);
void func1(void) {
printf("Function 1\n");
}
void func2(void) {
printf("Function 2\n");
}
int main() {
func_ptr_t func_array[2] = {func1, func2};
for (int i = 0; i < 2; i++) {
func_array[i](); // 调用不同的函数
}
return 0;
}
案例2:函数指针作为返回类型实现工厂模式
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int (*get_operation(char op))(int, int) {
switch (op) {
case '+': return add;
case '-': return subtract;
default: return NULL;
}
}
int main() {
int (*operation)(int, int) = get_operation('+');
if (operation) {
printf("Result: %d\n", operation(5, 3));
}
return 0;
}
案例3:使用函数指针和qsort进行自定义排序
#include <stdio.h>
#include <stdlib.h>
int compare_ints(const void *a, const void *b) {
int arg1 = *(const int *)a;
int arg2 = *(const int *)b;
return (arg1 > arg2) - (arg1 < arg2);
}
int main() {
int array[] = {3, 1, 4, 1, 5, 9};
int size = sizeof(array) / sizeof(array[0]);
qsort(array, size, sizeof(int), compare_ints);
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
案例4:使用函数指针处理信号
#include <stdio.h>
#include <signal.h>
void handle_sigint(int sig) {
printf("Caught signal %d\n", sig);
}
int main() {
signal(SIGINT, handle_sigint);
printf("Press Ctrl+C to generate a signal\n");
while (1) {
// 等待信号
}
return 0;
}
三、总结
函数指针在C语言中的应用广泛且深远,它不仅让函数调用变得灵活,还为实现多态、工厂模式、自定义排序、信号处理等高级功能提供了可能。通过本文的解析和案例,我们深入探讨了函数指针的高级玩法,希望你在实际编程中能够灵活运用这些技巧,让你的代码更加高效、优雅。
标签:return,int,void,C语言,func,函数指针,高阶,array From: https://blog.csdn.net/suifengme/article/details/140893922