我需要对指向数组的指针进行排序。实际上,我需要在地址之间进行搜索,以查看数组中是否存在给定结构的指针。不幸的是,在这些结构里面我没有什么“可比的”,所以我想按地址排序。 我的代码是这样的:qsort和bsearch指针数组
item* arr[SIZE];
//something is inserted
qsort(arr, SIZE, sizeof(item*), (void*)compare_funct);
//CUT
bsearch(curr, arr, SIZE, sizeof(item*), (void*)compare_funct);
我试图创建一个compare_funct只是转换指针为int并返回它们的区别,但它似乎并没有工作。特别是,当我做bsearch时,即使我知道元素包含在数组中,我总是会得到一个NULL作为返回值。
这比仅关闭类型检查更糟糕:它是未定义的行为。不能安全地将一个函数指针转换为数据指针,反之亦然。想象一下,在一个哈佛架构机器上(单独的数据和程序总线),或者在小型(32位数据,16位函数指针)或中型存储器型号(16位数据和32位函数指针)中的旧DOS编译器上会发生什么。 – 2011-05-29 15:49:32
虽然我们在这里,'b-a'也是未定义的行为,除非'b'和'a'碰巧指向一个公共数组。可移植版本是'memcmp(&a,&b,sizeof a);' - 比较指针逐字节的*表示而不是尝试去改变它们的区别。 – 2011-05-29 16:39:36
你可以简化它只是'memcmp(p,q,sizeof(item *));' – 2011-05-29 16:41:06