在指针指向的地址处创建结构体

标签 c pointers struct

我有一个 unsigned char* head ,它指向内存中的某个地址,现在我必须创建一个 typedef 结构,我已声明该结构从该指针的位置开始......我很困惑如何做到这一点!

这是 typedef 的声明

 typedef struct {
    struct block *next;
    struct block *prev;
    int size;
    unsigned char *buffer;
} block;

我的作业涉及实现malloc,所以我不能使用malloc。 block 是 free_list 的一部分,其中包含我的程序堆中的所有空闲内存块 block 。因此,前一个和下一个指针指向前一个和下一个空闲内存块。

Head 指向 free_list 的开头。当我必须分割第一个可用内存块以满足需要更少空间的 malloc() 请求时,我需要移动我的头并在那里创建一个新的 block 结构。

希望这是有道理的。如果没有,分配看起来类似于 this

最佳答案

您的结构没有标签,因此您需要给它一个标签才能使其指向自身:

 typedef struct block {
    struct block *next;
    struct block *prev;
    int size;
    unsigned char *buffer;
} block;

如果您使用的是 C99,如有必要,您可以直接在 head 处初始化内存,而无需声明临时 struct block:

*(block *)head = (block){NULL, NULL, 0, NULL};

现在,只要正确转换它,您在地址 head 处就有了一个 struct block

例如

((block *)head)->size = 5;

或者您为其分配一个强制转换指针:

block *p = (block *)head;
p->size = 5;

关于在指针指向的地址处创建结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592721/

相关文章:

c - 当 PIC32 上使能中断时,不等于运算符不工作

c - 访问字符串数组

c++ - 从指向子变量的指针转换为指向父变量的指针是否安全?

c - book[] in if 语句错误

c - 初始化嵌套结构

c - 用多线程修改一个结构c编程

c - 简单字符串连接的问题

c - 检测宏中的整数常量表达式

c - 使用 curses 绘制简单的盒子

C++ Loop 最多运行一次