我正在編寫一個程序,以將多個typedef
「項目」實例存儲在隊列中(使用this queue implementation),並且我遇到了將數據從隊列中取回的問題。C - 從存儲在隊列中的項目中檢索變量
下面是相關的代碼,減去文件打開/關閉線(代碼需要一個輸入文件,並將單個值到實例):
Sample file:
1 2 10 20 30
------------
/* create new item */
Item *newItem = malloc(sizeof(Item));
/* string tokenizer */
...
/* set item variables */
newItem->value1 = strtol(tokens[0], NULL, 10); //should contain 1
newItem->value2 = strtol(tokens[1], NULL, 10); //should contain 2
newItem->value3 = strtol(tokens[2], NULL, 10); //should contain 10
newItem->value4 = strtol(tokens[3], NULL, 10); //should contain 20
newItem->value5 = strtol(tokens[4], NULL, 10); //should contain 30
/* add to item queue */
queue_push_tail(itemQueue, &newItem);
/* add second item with different values, same method as above */
...
/* check queue values */
if(!queue_is_empty(itemQueue)) {
Item *itemHead = queue_peek_head(itemQueue); //this should differ...
printf("Head: %d %d\n", itemHead->value1, itemHead->value5);
Item *itemTail = queue_peek_tail(processQueue); //...from this
printf("Tail: %d %d\n", itemTail->value1, itemTail->value5);
}
我怎樣才能再訪問這些項目中的一個查看變量?我想我可以使用類似queue_peek_head(itemQueue)->value1
的東西來查看項目中的第一個變量(在上面的示例中,1
,因爲它存儲在隊列中的第一個newItem.value1
中),但由於某種原因,這不起作用。
這不是C++。你沒有得到類型指針。根據您使用的API,「QueueValue」(推送的值和通過剝離返回的值)與'void *'同義。在解引用基礎字段之前,你必須將其重新轉換爲'Item *'(並且當你這樣做時,最好有一個有效的「Item」地址)。 – WhozCraig
啊,我明白了。我一定弄錯了語法。所以當我試圖獲取數據時,我應該使用'(Item *)'調用'queue_peek_head'作爲前綴?通過解引用基礎字段,你究竟意味着什麼?對不起,我仍然在抓指針和參考。 – user41419
'if(!queue_is_empty(itemQueue)){Item * p = queue_peek_head(itemQueue);用p做一些事情''這是C.忘記引用。思考指針。 – WhozCraig