通过函数指针调用的函数
。不是
由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的
,用于对该事件或条件进行响应。qsort是一个库函数,用来对数据进行排序,可以排任意类型的数据
我们打开cplusplus网站搜索qsort
这个qsort函数有4个参数:
void qsort(void* base,
size_t num,
size_t size,
int (*compar)(const void*, const void*));
这里有个void*的指针类型,这个指针类型是通用指针类型
,这个指针类型可以接收任意类型数据的地址,就可以理解成指针垃圾桶,谁的地址都可以往里扔~~
是一个无具体类型的指针,所以就不能+1,也不能解引用
我们也介绍完了这个函数,我们来使用一下
写出我们的主函数:
int main()
{
int arr[] = { 3,2,5,6,8,7,9,1,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
for (size_t i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
使用回调函数,模拟实现qsort(采用冒泡的方式)。
今天我们使用冒泡排序,来实现一个对任意类型能够排序的函数
我们先来实现一个整形的冒泡排序,然后再进行改造~~
void bubble_sort(int arr[], int sz)
{
int i = 0;
for ( i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[] = { 3,2,5,6,8,7,9,1,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (size_t i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
接下来我们开始改造~~
void print_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
void Swap(void* p1, void* p2, int size)
{
int i = 0;
for (i = 0; i < size; i++)
{
char tmp = *((char*)p1 + i);
*((char*)p1 + i) = *((char*)p2 + i);
*((char*)p2 + i) = tmp;
}
}
void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
{
int i = 0;
int j = 0;
for (i = 0; i < count - 1; i++)
{
for (j = 0; j < count - i - 1; 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 cmp_int(const void* e1,const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
void test1()
{
int arr[] = { 3,2,5,6,8,7,9,1,4 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), cmp_int);
print_arr(arr,sz);
}
int main()
{
test1();
return 0;
}
好了,指针的第四部分就到这里就结束了~~
如果有什么问题可以私信我或者评论里交流~~
感谢大家的收看,希望我的文章可以帮助到正在阅读的你