回调函数
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语言中提供了一种灵活性,使得函数可以接受不同类型的数据,而不需要关心这些数据的实际类型。