回调函数
C语言中的回调函数是指一个函数作为参数传递给另一个函数,在适当的时候由另一个函数调用。回调函数在需要执行某些特定任务时被调用,可以实现程序的灵活性和可扩展性。回调函数就是一个通过函数指针调用的函数。
库函数中 qsort 就是一个回调函数。
自行实现qsort
#include <stdio.h> int cmp_int (const void* e1, const void* e2) { return *(int*)e1 - *(int*)e2; } void swap(char* str1, char* str2, size_t size) { int i = 0; for (i = 0; i < size; i++) { int tmp = *str1; *str1 = *str2; *str2 = tmp; str1++; str2++; } } void my_qsort(void* base, size_t num, size_t size, int(*cmp)(const void* e1, const void* e2)) { int i = 0; for (i = 0; i < num; i++) { int j = 0; for (j = 0;j<num-1-i;j++) { if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0) { swap((char*)base + j * size, (char*)base + (j + 1) * size, size); } } } } int main() { int arr[] = {9,8,7,6,5,4,3,2,1.0 }; int sz = sizeof(arr) / sizeof(arr[0]); my_qsort(arr, sz, sizeof(arr[0]), cmp_int); int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
void* 讲解
在C语言中,void
关键字表示“无类型”,而 void*
则是“无类型指针”,它可以指向任何类型的数据。void*
指针可以指向任意类型的数据,这意味着可以用任意类型的指针对 void*
指针赋值。例如:
- void*相当于一个垃圾桶,通过使用
void*
指针,可以实现对不同类型的指针进行统一的操作,增加程序的灵活性和可扩展性。但在使用void*
指针时需要小心,确保进行正确的类型转换,避免出现类型错误导致的问题。 - 总之,
void*
指针在C语言中提供了一种灵活性,使得函数可以接受不同类型的数据,而不需要关心这些数据的实际类型。