自拟sort函数
void bubble_sort (void* base, int sz, int width,
int (*cmp)(const void* e1, const void* e2))
其中实现两个未知指针指向的地址内容的比较函数int (*cmp)(const void*e1, const void*e2)
在不知道这两个指针的类型的前提下如何找到实现两个地址中内容的比较
首先将将空指针的base强制转换成char*字符型指针,由于字符型指针的偏移大小为1字节,如下
/char *类型指针 + 1,内存偏移 1 字节;
/int *类型指针 + 1,内存偏移 4 字节;
/double *类型指针 + 1,内存偏移 8 字节。
通过(char*)base+j*width的形式可以很好找到两个内容的地址,转换成char*是因为其偏移大小为1所以代码的兼容性更好,如果要比较的是char类型那么width是1,如果是int类型那么width是4,如果要是doule类型那么width是8。但是强制转换成int*的话,如果要比较的是char类型那么width需要是1/4,因为int*类型指针+1后内存偏移的字节是4,而我们要比较的char类型所占大小仅为1字节。如果是int类型那么width需要是1,如果要是doule类型那么width需要是2。这种写法比较反人类。