我在 C 中有一些初學者問題,我試圖將一些節點插入到鏈表中,但它始終為空。我無法更改booklist. 這是以下代碼
typedef struct bookInfo {
int code;
char titre[50];
char auteur[50];
char editeur[50];
int date;
struct bookInfo *next;
struct bookInfo *prec;
} Book;
typedef Book *bookList;
bookList book_ref;
void newBook(Book *bk, int val)
{
Book *new_node = (Book *)malloc(sizeof(Book));
Book *last = bk;
new_node->code = val;
new_node->next = NULL;
if (bk == NULL)
{
bk = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
return;
}
int main()
{
newBook(book_ref, 45);
printf("%p\n",book_ref);
newBook(book_ref, 42);
printf("%p",book_ref);
}
uj5u.com熱心網友回復:
你的目標是當newBook第一次被呼叫時,book_ref應該有一個指向串列第一個元素的地址。
當需要修改指標時,需要傳入指標的地址。在這種情況下,您需要將 的地址傳遞book_ref給newBook現在必須使用指向指標的指標的函式:
typedef struct bookInfo
{
int code;
char titre[50];
char auteur[50];
char editeur[50];
int date;
struct bookInfo *next;
struct bookInfo *prec;
} Book;
typedef Book *bookList;
bookList book_ref;
void newBook(Book **bk, int val)
{
Book *new_node = malloc(sizeof(Book));
Book *last = *bk;
new_node->code = val;
new_node->next = NULL;
if (*bk == NULL)
{
*bk = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
return;
}
int main(void)
{
newBook(&book_ref,45);
printf("%p\n",(void *) book_ref);
newBook(&book_ref,42);
printf("%p\n",(void *) book_ref);
printf("%d\n", book_ref->next->code);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386859.html
