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“与编译器斗争”是不好的(如果答案正确就没有线索)好的“与编译器抗争”是不好的(如果答案正确,则没有线索)好的“与编译器抗争”是不好的(如果答案正确,则没有线索)