gpt4 book ai didi

你可以 bool 值小于比较 C 中的 2 个 void * 值吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:23 25 4
gpt4 key购买 nike

我正在对列表中的一些内存指针进行 qsort() 处理,以便稍后在函数中对它们进行 bsearch。我的问题是,我是否需要将这些值强制转换为 const void * 以外的其他内容才能在 C 中进行合法比较?我可以只进行转换并让编译器告诉我,但我感觉这可能取决于编译器。

最佳答案

比较很好,算术和取消引用不是(因为您不知道基础数据的大小)。所以是的,您可以很好地比较 void 指针 (a)

但是,请记住,您通常不会比较传递给 qsort 比较函数的指针,除非您想对它们的地址进行排序。但是,由于它们已经按该顺序排序(作为一个数组),因此没有太多用例:-)

您通常将 void 指针转换为特定指针,然后比较它们所指向的。例如:

int compfn (const void *p1, const void *p2) {
const char *str1 = *((const char **)(p1));
const char *str2 = *((const char **)(p2));
return strcmp (str1, str2);
}

您不必创建像 str1str2 这样的临时文件(即使任何体面的编译器无论如何都会优化它们)。除了轻微的可读性问题外,没有任何问题:

int compfn (const void *p1, const void *p2) {
return strcmp (*((const char **)(p1)), *((const char **)(p2)));
}

(a) 服从于指针必须都指向同一数组的元素或该数组之外的元素的正常规则 - 其他任何内容都是未定义的。为了完整起见,我提到了这一点,但是,如果您使用 qsort,无论如何您都将处理数组。

关于你可以 bool 值小于比较 C 中的 2 个 void * 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020645/

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