C语言中结构的用法

前端之家收集整理的这篇文章主要介绍了C语言中结构的用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读关于malloc(first-fit)实现的脚本,我对元数据结构的值赋值有点困惑.任何人都可以解释为什么malloc返回flag_block-> ptr(作为指向已分配内存的指针)?据我所知,没有具体的任务.
typedef struct _Metadata {
    size_t size;
    char free;
    struct _Metadata* next;
    struct _Metadata* prev;
    char ptr[];
} Metadata;

Metadata* flag_block = NULL; 

void *malloc(size_t size)
{
    if (size==0) {
        return NULL;
    }

    if (flag_block == NULL) {
        flag_block = sbrk(size);
        sbrk(sizeof(Metadata));
        if (flag_block == (void *)-1) {
            return NULL;
        }
        flag_block->free = 0;
        flag_block->next=NULL;
        flag_block->prev=NULL;
        flag_block->size = size;
        return flag_block->ptr;
    } else {

    /* 
        ....
    */

    }
}

解决方法

ptr被称为灵活的阵列成员;它是一个没有大小的数组,只能出现在结构的末尾.

基本上这个:

return flag_block->ptr;

相当于

return &flag_block->ptr[0];

所以它返回结构中其余成员之后的第一个字节的地址.

猜你在找的C&C++相关文章