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

标签 c arrays

我目前正在尝试实现基数排序算法。为了实现,我必须创建一个链表数组。我在以下几行中执行此操作:

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

我为以下函数提供一个未排序的链表 (v),一个代表我想要返回的数字的“n”(1 意味着我想要单位编号,10 意味着我想要十位数等on) 和一个必须排序的未排序链表 (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;
}

最佳答案

你有太多的转换,这可能表明你在与编译器作斗争并强制它接受你的代码,这是非常糟糕的。

问题是

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

不仅 v[r] 已经是 nod 类型,而且您要将其转换为 nod

所以解决办法就是改成这个

adaugaSfarsit(&v[r], cap->val);

关于c - 为什么数组中的点头被认为是 'nod' 而不是 'struct nod' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399709/

相关文章:

c - 如何初始化包含 union 数组的结构

在c中将1d数据转换为3d的c代码

javascript - 使用 jQuery 解析 XML 文本

Python SVM 设置具有序列错误的数组元素

Python ctypes 和指针作为函数参数

在 C 中的字符串 vector 之间复制字符串

c - 在 C99 中打印带和不带 & 的指针之间的区别

c - 编写一个程序,将用户输入的数字相乘,直到这些数字的乘积达到 1000

Javascript 将数组索引简化为参数

javascript - Array.push 不是 Promise 内部的函数