为什么数组中的点头被认为是'nod'而不是'struct nod'?

时间:2015-04-01 20:00:33

标签: c arrays

我目前正在尝试实施Radix Sort算法。为了实现,我必须创建一个链表列表。我在以下几行中这样做:

typedef struct _nod {
    struct _nod *next;
    int val;
}   nod;
v=(nod*)malloc(10*sizeof(nod));  

我将以下功能提供给未排序的链接列表(v),以及' n'表示我想要返回的数字(1表示我想要单元号,10表示我想要十位数字等)和一个必须排序的未排序链表(cap)。

nod *sorteaza(nod *v,nod *cap,int n)    {
    nod *sort,*aux;
    int cat,r,i;
    sort=(nod*)malloc(sizeof(nod));
    while(cap->next!=NULL)  {
        cat=cap->val/n;
        r=cat%10;
        adaugaSfarsit(&v[r],cap->val);
        cap=cap->next;
    }
    cat=cap->val/n;
    r=cat%10;
    adaugaSfarsit((nod)v[r],cap->val);

    for(i=0;i<10;i++)   {
        aux=&v[i];
        while(aux->next!=NULL)  {
            adaugaSfarsitNod(sort,v[i].next);
            aux=aux->next;
        }
        adaugaSfarsitNod(sort,v[i].next);

    }
}

我运行此程序时遇到的问题是由v [i]生成的,它给出了以下错误:

1.c: In function ‘sorteaza’:
1.c:73:2: error: incompatible type for argument 1 of ‘adaugaSfarsit’
  adaugaSfarsit((nod)v[r],cap->val);
  ^
1.c:29:6: note: expected ‘struct nod *’ but argument is of type ‘nod’
 nod* adaugaSfarsit (nod *cap,int inf)

有人可以向我解释为什么它会给我这个错误吗?据我所知,v [i]是一个点头,这是我在adaugaSfarsit的参数中要求的,这个参数声明如下:

nod* adaugaSfarsit (nod *cap,int inf)

{
    nod *nou, *p;
    p = cap;
    nou = (nod*) malloc( sizeof(nod));
    nou->val=inf;
    nou->next = NULL;
    if(cap == NULL)
        cap=nou;
    while (cap->next != NULL)
        cap = cap->next;    //parcurg lista pana ajung la ultimul nod
    cap->next = nou;    //adaug elementul
    return p;
}


nod* adaugaSfarsitNod (nod *cap,nod *nou)

{
    nod *p;
    p = cap;
    if(cap == NULL)
        cap=nou;
    while (cap->next != NULL)
        cap = cap->next;    //parcurg lista pana ajung la ultimul nod
    cap->next = nou;    //adaug elementul
    return p;
}

1 个答案:

答案 0 :(得分:4)

你有太多的演员阵容,这可能表明你正在与编译器作斗争并强迫它接受你的代码,这是非常糟糕的。

问题是

adaugaSfarsit((nod)v[r],cap->val);
              /* ^ here it's very wrong */

不仅v[r]已经是[{1}}类型,而且还要将其投放到nod

所以解决方案就是用这个

来改变它
nod