簡體   English   中英

理解c中的一行代碼有困難

[英]Trouble in understanding a line of code in c

我正在進行一項練習,其中這是一段代碼:

typedef struct node 
{
    size_t size;
    struct node *next;
} node_t;

byte heap[SIZE];

node_t *node_list;

void heap_init()
{
    node_list = (node_t*) heap;
    node_list->size = SIZE;
    node_list->next = NULL;
}

但我站在這條線上有一些麻煩:

node_list = (node_t*) heap;

heap是一個大小為SIZE的字節數組。

node_listnode_t類型的指針。 該指針分配給數組heap的第一個字節。 這樣做是將node_list分配給分配的內存位置。

我猜測列表的下一個指針將被分配到該數組的更遠位置。

這很可能是模擬全局變量中的堆,並避免使用不能用於某些嵌入式系統的malloc

代碼使用為heap分配的內存來存儲node_t實例,而不是使用malloc功能函數之一來分配它。

變量heap本身降級為指向byte*的指針,代碼顯示“我想將byte*重新解釋為node_t*指針”。

請注意,要使其工作,值SIZE必須至少為sizeof(node_t) ,否則node_t實例將不適合heap變量。

你指向的代碼似乎是使用一種不太常見分配內存的 方法 ,即字節數組 ...而不是malloc或calloc的常用方法

現在

node_list =(node_t *)堆;

所有人都可以從這一行推斷,因為在這里是一個字節數組,並且

node_list指向 struct node類型的指針 ,指向名為heap字節數組起始地址 ,因為指針是byte * type,所以它被類型化為struct node * type。

可以推斷它就像struct node * ptr =(struct node *)malloc(sizeof(struct node));

這里(struct node *)用在malloc前面(sizeof(struct node)); to mallpecast由malloc返回的void指針類型,以匹配'='等號左側所需的struct node類型。

希望能幫助到你 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM