[英]C programming Linked list for loop
給定標准鏈接列表,其中“ apples”是具有(-> first和-> last屬性)的列表,而“ apple”是具有(-> next屬性)的列表元素。 這個for循環如何運作?
typedef struct
{
list_element header;
int value;
} apple;
int main()
{
list apples;
apple * a = (apple *) malloc(sizeof(apple));
apple * b = (apple *) malloc(sizeof(apple));
apple * c = (apple *) malloc(sizeof(apple));
a->value = 1;
b->value = 2;
c->value = 3;
list_init(&apples);
list_push_back(&apples, &a->header);
list_push_back(&apples, &b->header);
list_push_back(&apples, &c->header);
for (a = (apple *) list_begin(&apples); a; a = (apple *) list_next(&a->header)) { printf("%d\\n", a->value); }
這個for循環如何工作? list_begin函數只返回-> first of apples。 ; a; 如條件語句所說,如果不為0,則繼續for循環嗎? 最后一部分將a指向循環中的下一個元素。 因此,當循環的最后一個值是a = 0時,將終止for循環嗎?
那有意義嗎?
for的文檔將幫助您:
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
說明
表現如下:
... cond_expression在循環主體之前評估。 如果表達式的結果為零,則循環語句立即退出。
在您的情況下, cond_expression
僅為a
並且當a
為零(對於指針為NULL)時,循環退出。
for
循環用於從第一個節點到最后一個節點遍歷(直到),發現它為NULL
(遍歷整個鏈表)。
第一個參數: a = (apple *) list_begin(&apples)
將a
放在該列表的開頭。
第二個參數: a
是一個條件,它將在到達最后一個節點之后被違反,因為它將為NULL
。
口渴參數: a = (apple *) list_next(&a->header)
用於遍歷列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.