gpt4 book ai didi

c - 像 qsort 这样的 C 函数如何处理不同的数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:27 24 4
gpt4 key购买 nike

stdlib.h中,有函数qsort()的声明,其原型(prototype)为:

void qsort( void *ptr, size_t count, size_t size,
int (*comp)(const void *, const void *) );

很明显是泛型编程。我想知道它是如何实现的,如何从 void * 类型中获取元素?

最佳答案

void * 指针根据 size_t 大小(qsort 中的第三个参数)进行转换

首先我们将 void* 类型转换为 char* 然后根据 size 进行指针运算(因为 char 取 1 字节,所以添加大小将给出正确的指针算法)

编辑:(对于内置数据类型)

char *ptr = (char*)vp; //here vp is void *p

*(ptr + (n-1)*size); //will give you nth element

例如

size =1 and want 3rd element it means it will give you 3rd char
size =4 and want 3rd element it means it will give you 3rd int or float
size =2 and want 3rd element it means it will give you 3rd short int
size =8 and want 3rd element it means it will give you 3rd double

注意:大小是实现定义的,因此它可能因编译器而异

关于c - 像 qsort 这样的 C 函数如何处理不同的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com