【问题标题】:qsort with pointer of pointer of struct带有结构指针指针的 qsort
【发布时间】:2015-11-20 00:17:13
【问题描述】:

我有这个结构:

typedef struct arvDado Arv; 
struct arvDado{
    char c;
    int qtd;
    Arv* dir;
    Arv* esq;
};

我正在制作这个结构的指针数组:

Arv** vetArv = (Arv**)malloc(sizeof(Arv*)*qtd);

我想做一个 qsort,但我认为我的 comper 函数不起作用......

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

【问题讨论】:

  • 以什么方式不起作用?你得到什么输入/输出?
  • 你分配了一个Arv*的数组。我没有看到你在任何地方初始化你的数组。

标签: c arrays pointers struct qsort


【解决方案1】:

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

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

应该是:

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

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

【讨论】:

    猜你喜欢
    • 2019-01-18
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多