Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么数组中的nod被认为是';点头';而不是';结构节点';?_C_Arrays - Fatal编程技术网

C 为什么数组中的nod被认为是';点头';而不是';结构节点';?

C 为什么数组中的nod被认为是';点头';而不是';结构节点';?,c,arrays,C,Arrays,我目前正在尝试实现基数排序算法。为了实现,我必须创建一个链表数组。我是这样做的: typedef struct _nod { struct _nod *next; int val; } nod; v=(nod*)malloc(10*sizeof(nod)); 我为下面的函数提供了一个未排序的链表(v)、一个表示我想要返回的数字的“n”(1表示我想要单元号,10表示我想要十位数,依此类推)和一个必须排序的未排序链表(cap) nod *sorteaza(nod *v,no

我目前正在尝试实现基数排序算法。为了实现,我必须创建一个链表数组。我是这样做的:

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]是一个nod,这就是我在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);

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

问题是

adaugaSfarsit((nod)v[r],cap->val);
              /* ^ here it's very wrong */
不仅
v[r]
已经是类型
nod
,而且您正在将其强制转换为
nod

所以解决办法就是用这个来改变它

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

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

问题是

adaugaSfarsit((nod)v[r],cap->val);
              /* ^ here it's very wrong */
不仅
v[r]
已经是类型
nod
,而且您正在将其强制转换为
nod

所以解决办法就是用这个来改变它

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

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

问题是

adaugaSfarsit((nod)v[r],cap->val);
              /* ^ here it's very wrong */
不仅
v[r]
已经是类型
nod
,而且您正在将其强制转换为
nod

所以解决办法就是用这个来改变它

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

因为你有
typedef
ed它(问题标题)。
nod
nod*
不一样。可能不是
(nod)v[r]
你需要
&v[r]
v+r
因为你有
typedef
ed它(问题标题)。
nod
nod*/code>不一样。可能是
(nod)v[r]
你需要
&v[r]
v+r
因为你有
typedef
编辑它(问题标题)。
nod
nod*
不一样。你可能需要
(nod)v[r]
而不是
&v[r]
或者
v+r
因为你有
typedef
编辑它(问题标题).
nod
nod*
是不一样的。你可能需要
(nod)v[r]
而不是
&v[r]
或者
v+r
Nice“与编译器斗争”是不好的(如果答案正确就没有线索)Nice“与编译器斗争”是不好的(如果答案正确就没有线索)好的“与编译器抗争”是不好的(如果答案正确,则没有线索)好的“与编译器抗争”是不好的(如果答案正确,则没有线索)