[英]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.