簡體   English   中英

使用類型轉換將 char 數組分配給結構

[英]Assignment of char array to struct with type casting

我正在處理我的 C 程序代碼以在不使用malloc()情況下分配內存。 我的朋友正在使用鏈表來管理內存,我在這個例子中做了它,但我不知道這種類型的賦值在函數memory_init()是如何工作的。

這是示例測試的主要內容:

#include <string.h> 
int main() {   
  char region[50];   
  memory_init(region, 50);   
  char* pointer = (char*) memory_alloc(10);    
  if (pointer)     memset(pointer, 0, 10);   
  if (pointer)     memory_free(pointer);   
  return 0;
} 

還有函數memory_init()

void memory_init(void *ptr, unsigned size) {    

    struct metadata *first;
    first=(struct metadata*)ptr;
    first->next=NULL;
    first->prev=NULL;
    if (size > sizeof(struct metadata)) first->value=(size - sizeof(struct metadata));
    else first->value=0;
    first->boo=-1;
    zac=first;
}

還有使用的結構:

struct metadata{        
    short boo;      // if -1 free, if 1 memory used
    unsigned value; //size of memory block
    struct metadata *next; 
    struct metadata *prev;  
};

所以我不知道這部分代碼是如何工作的:

first=(struct metadata*)ptr;

在我看來,它需要一個發送到函數的 char 數組並將其重新鍵入一個結構體並分配它,但我不知道這樣的分配是如何工作的? 它是分配內存地址還是什么,因為我不知道如何將 char 重新鍵入到結構中。 基本上我想知道那里發生了什么。

你有記憶; 內存的每個字節都有一個地址。

最初,您有void *ptr ,它保存內存中某個字節的地址。

當你first=(struct metadata*)ptr; 你告訴編譯器,從現在開始我威脅ptr下的內存,就好像這個內存保存struct metadata ,你first使用它來訪問該內存。

將其視為將struct metadata數據定義的數據布局映射到某個原始內存區域。

我不確定我明白你在問什么,但“ptr”是一個空指針,“first”是一個指向“元數據”結構的指針。 所以“(struct metadata*)”被用作演員表。

暫無
暫無

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

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