0
我正在使用鏈表的數組的等待列表中。我之前使用過鏈表,但無法弄清楚如何將數組傳遞給函數。我已經開始聲明頭指針和尾指針的數組了。我收到此錯誤:將鏈表的數組傳遞到函數中
warning: incompatible pointer types passing 'struct node *(*)[4]'
to parameter of type 'struct node ***' [-Wincompatible-pointer-types]
add(&head,&tail);
^~~~~
lab6.c:10:31: note: passing argument to parameter 'tail' here
void add(NODE ***head,NODE ***tail);
這裏是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NODE struct node
struct node {
char name[20];
int number;
NODE *next;
};
void add(NODE ***head,NODE ***tail);
void delete(NODE ***head,NODE ***tail);
void show(NODE ***head);
int main() {
//Initialize
NODE *head[4]={NULL,NULL,NULL,NULL};
NODE *tail[4]={NULL,NULL,NULL,NULL};
int whileLoop=0;
while(whileLoop==0) {
int selection;
printf("Choose an Option: 1)Add new party 2)Remove table 3)Show list 4)Quit: ");
scanf("%d",&selection);
switch(selection) {
case 1:
add(&head,&tail);
break;
case 2:
delete(&head,&tail);
break;
case 3:
show(&head);
break;
case 4:
whileLoop=1;
break;
default:
add(&head,&tail);
}
}
return 0;
}
void add(NODE ***head,NODE ***tail) {
char tempName[20];
printf("enter a name for the party: ");
scanf("%s",tempName);
printf("enter a party size: ");
int tempSize;
scanf("%d",&tempSize);
if (tempSize>0) {
NODE *ptr=(NODE *)malloc(sizeof(NODE));
strcpy(ptr->name,tempName);
ptr->number=tempSize;
ptr->next=NULL;
int i;
if (tempSize>=1 && tempSize<=2) {
i=0;
} else if (tempSize>=3 && tempSize<=4) {
i=1;
} else if (tempSize>=5 && tempSize<=6) {
i=2;
} else {
i=3;
}
if (NULL==*head[i]) {
*head[i]=*tail[i]=ptr;
} else {
(*tail[i])->next=ptr;
(*tail[i])=ptr;
}
} else {
printf("Valid size not entered");
}
}
void delete(NODE ***head,NODE ***tail) {
}
void show(NODE ***head) {
}
而不是使用'#define',你可以在結構上使用'typedef'。增加可讀性。 – 2014-10-29 09:32:24
因爲你實際上並沒有在'add'函數中分配'head'或'tail',所以你不需要通過「引用」來傳遞。我建議你放棄一個間接。 – 2014-10-29 09:34:07
至於你的問題,指向指針數組的指針*不是指向指針指針的指針。按照上面的我的建議,你也會真正解決你的編譯器錯誤。 – 2014-10-29 09:35:58