我有这个结构:
typedef struct arvDado Arv;
struct arvDado{
char c;
int qtd;
Arv* dir;
Arv* esq;
};
我正在制作一个这个结构的指针数组:
Arv** vetArv = (Arv**)malloc(sizeof(Arv*)*qtd);
我想制作一个qsort,但我认为我的编曲功能不起作用......
comper function:
int comparaCelula(const void *x, const void *y){
Arv *a=(Arv*)x, *b=(Arv*)y;
printf(" %d x %d",a->qtd,b->qtd);
if(a->qtd == b->qtd) return 0;
if(a->qtd < b->qtd) return -1;
if(a->qtd > b->qtd) return 1;
}
对于你想看到我的qsort实现的任何情况都是这样的:
Arv的数组= Arv ** vetCell / vet的大小= qtd / struct Arv / comper函数的大小
qsort(vetCel, qtd, sizeof(Arv*), comparaCelula);
答案 0 :(得分:4)
qsort的比较函数给出了数组中元素的ADDRESS。由于您的数组是一个指针数组,因此您将获得指针指针。所以,这一行:
Arv *a=(Arv*)x, *b=(Arv*)y;
应该是:
Arv *a=*((Arv**)x), *b=*((Arv**)y);
因为x和y是指向Arv(Arv **)
的指针