函数指针在 C 语言中的实验221



函数指针是 C 语言中一种强大的机制,它允许程序员间接地调用函数。通过将函数地址存储在指针变量中,程序员可以在运行时动态地选择和执行函数。本文将通过一个实验深入探讨函数指针在 C 语言中的应用,并展示其灵活性。

函数指针语法

函数指针的语法如下:```c
int (*function_pointer)(arg1, arg2, ...);
```

其中,`function_pointer` 是指针变量,它指向一个具有指定参数列表和返回值类型的函数。指针变量本身拥有与函数相同的类型。

实验 1:比较两个数字

我们的第一个实验是创建一个函数指针,用于比较两个整数并返回更大的一个。以下代码展示了实现:```c
#include
// 比较函数
int compare(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
// 创建函数指针
int (*larger)(int, int);
larger = &compare;
// 使用函数指针比较两个数字
int num1 = 10;
int num2 = 15;
printf("较大数字:%d", larger(num1, num2));
return 0;
}
```

实验 2:计算数组元素和

下一个实验是创建一个函数指针,用于计算数组中所有元素的和。以下代码展示了实现:```c
#include
// 求和函数
int sumArray(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
int main() {
// 创建函数指针
int (*sum)(int[], int);
sum = &sumArray;
// 使用函数指针计算数组和
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("数组元素和:%d", sum(arr, size));
return 0;
}
```

实验 3:排序字符串数组

最后一个实验是创建一个函数指针,用于对字符串数组进行排序。以下代码展示了实现:```c
#include
#include
// 比较字符串函数
int compareStrings(const char* a, const char* b) {
return strcmp(a, b);
}
// 排序函数
void sortStrings(char arr[][10], int size, int (*compare)(const char*, const char*)) {
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (compare(arr[i], arr[j]) > 0) {
char temp[10];
strcpy(temp, arr[i]);
strcpy(arr[i], arr[j]);
strcpy(arr[j], temp);
}
}
}
}
int main() {
// 创建函数指针
int (*sort)(char[][10], int, int (*)(const char*, const char*));
sort = &sortStrings;
// 使用函数指针排序字符串数组
char arr[][10] = {"abc", "def", "ghi", "jkl"};
int size = sizeof(arr) / sizeof(arr[0]);
sort(arr, size, compareStrings);
// 打印排序后的数组
for (int i = 0; i < size; i++) {
printf("%s", arr[i]);
}
return 0;
}
```

通过以上实验,我们演示了函数指针在 C 语言中的强大功能。通过使用函数指针,程序员可以灵活且动态地调用函数,从而扩展了代码的可能性和可重用性。函数指针广泛应用于各种场景,包括事件处理、回调函数和动态内存分配。掌握函数指针对于编写高效且灵活的 C 语言程序至关重要。

2025-02-06


上一篇:C 语言函数形参: 用法详解

下一篇:C 语言中 `printf` 函数的用法:入门指南