前言
这一章主要讲一下qsort函数以及sizeof和strlen的对比
制作不易,求个关注
回调函数是什么?
回调函数就是把一个函数的地址传给另外一个函数(把一个函数的地址当成另外一个函数的参数)
例:
test(add)//这里的add也是一个函数。
qsort函数(排序任意类型的数据)
是C语言提供的排序函数。是对两个相邻的数进行计算。
void qsort(voidbase,size_t nitems,size_t size,int(compar)(const void, const void))
voidbase:指针,指向了被排序数组的第一个元素。
size_t nitems:指向了被排序数组的元素个数。
size_t size:指向的被排序数组的元素大小(一个元素的字节数)
int(compar)(const voidp1, const voidp2):函数指针,指针指向的函数是用来比较被排序数组中的两个元素的
升序: p1-p2
p1>p2 返回>0;
p1<p2 返回<0;
p1=p2 返回0;
降序: p2-p1
p1<p2 返回>0;
p1>p2 返回<0;
p1=p2 返回0;
所以就是返回大于0的数字时,则交换
qsort函数的模拟实现
#define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int camp(const void* p1, const void* p2)
{
return(*(int*)p1 - *(int*)p2);
}
void sam(const void* p1, const void* p2, int size)
{
for (int i = 0; i < size; i++)
{
char tamp = *(char*)p1;
*(char*)p1 = *(char*)p2;
*(char*)p2 = tamp;
}
}
void qsort11(void* base, int con, int size, int(*camp)(void*, void*))
{
for (int i = 0; i < con - 1; i++)
{
for (int j = 0; j < con - 1 - i; j++)
{
if (camp(*(char*)base + j * size, *(char*)base + (j + 1) * size))
sam(*(char*)base + j * size, *(char*)base + (j + 1) * size, size);
}
}
}
int main()
{
int arr[] = {1,5,9,6,2,7,3,8,0,4};
qsort11(arr, sizeof(arr) / sizeof(arr[0]),sizeof(int), camp);
return 0;
}
sizeof和strlen对比
sizeof是计算里面操作数的类型长度的。单位:字节
里面的操作数可以是变量、类型、表达式(当为表达式时,表达式不计算)
strlen是计算字符串的长度的,统计\0之前的字符个数。
749

被折叠的 条评论
为什么被折叠?



