qsort与struct指针的指针

时间:2015-11-20 00:17:14

标签: c arrays pointers struct qsort

我有这个结构:

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);

1 个答案:

答案 0 :(得分:4)

qsort的比较函数给出了数组中元素的ADDRESS。由于您的数组是一个指针数组,因此您将获得指针指针。所以,这一行:

Arv *a=(Arv*)x, *b=(Arv*)y;

应该是:

Arv *a=*((Arv**)x), *b=*((Arv**)y);

因为x和y是指向Arv(Arv **)

的指针