我試圖理解為什么我有時會在 C 中的賦值運算子的右側看到包含資料型別的括號。
具體來說,我試圖實作一個鏈表,因為我還是 CI 的新手,所以我用它來指導我。
我遇到了這條線: struct node* link = (struct node*) malloc(sizeof(struct node));
instertFirst我猜它是函式的一部分,它向鏈表的頭部添加一個新專案。
根據我目前的理解,將這一行分解為:創建一個struct node名為的指標link,該指標指向一個新分配的記憶體塊,該記憶體塊是node結構的大小。
那么究竟是什么目的(struct node*)?我最好的猜測是它為新分配的記憶體塊提供了一種型別......?
uj5u.com熱心網友回復:
該函式malloc回傳一個指標,其型別void *與記憶體分配給哪個物件無關。
在 C 中,該型別的指標void *可以分配給任何其他物件型別的指標。
所以你可以寫
struct node* link = malloc(sizeof(struct node));
在 C 中,這種隱式轉換是被禁止的。您需要顯式地將型別的回傳指標強制void *轉換為struct node *類似的型別
struct node* link = (struct node*) malloc(sizeof(struct node));
在上面提到的 C 中,這樣的轉換是多余的,有時僅用于代碼的自我記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327458.html
上一篇:在C中列印UTF-8后未顯示文本
下一篇:C中結構定義之間的區別
