我正在嘗試列印一些包含 integer 的整數資料0,但我想忽略包含的資料NULL而不列印它。但是我的 C 代碼無法區分0andNULL并且將它們視為相同。
void ecrire(struct node *p) {
if (p->data == NULL) { 'if the first node contains NULL it means list is empty'
printf("no items!\n");
return;
}
struct node *temp = p;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
當我在第一個節點中傳遞一個包含值 0 的串列時,它會將其視為一個空串列。有什么解決辦法嗎?
uj5u.com熱心網友回復:
C 標準不提供整數型別來表示除整數以外的任何值。沒有空值或“NULL”值表示“不是任何整數值”。
該宏旨NULL在用于指標,而不是整數。它是一個空指標常量。對于指標,NULL是一個值,用于指示指標未指向任何事物(某些物件或函式)。它不應該與整數一起使用。您可以使用NULLwith 指標p來確定它是否指向一個結構,并且您可以使用它p->next來確定是否有另一個節點鏈接到該結構。
如果結構可能包含或不包含資料,那么通常您應該創建結構的另一個成員,指示它是否包含資料(和/或可能有多少資料或什么型別的資料)。或者,您可以指定一些可在data成員型別中表示的整數值,您將永遠不會將其用作其整數值,以作為結構中不存在資料的指示符。
uj5u.com熱心網友回復:
測驗傳遞給函式的指標是否為空指標與它指向的串列中節點struct node的整數成員的值之間存在混淆。data
NULL在 C 中用作宏來表示空指標常量。它用于測驗空指標。0也是指標背景關系中的空指標常量。與 SQL 不同,在 C 中沒有空值表示沒有數值的概念。
這是您的代碼的修改版本:
void ecrire(struct node *p) {
if (p == NULL) { // if the node pointer is NULL it means list is empty
printf("no items!\n");
return;
}
struct node *temp = p;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430180.html
標籤:C
上一篇:如何將C中的共享庫中的多維陣列作為np.array回傳到python?
下一篇:我可以簡化C中的選擇排序嗎?
