声明多个结构并将它们覆盖在已分配的内存上

时间:2014-12-03 18:32:17

标签: c memory struct

我是C / C ++的新手,所以我知道这个问题可能是微不足道的,但我不明白如何继续。我已经分配了每个512字节的内存块,因此(Sector是一个大小为512字节的结构): char* block = (char *) malloc (sizeof(Sector));

我有另一个128字节大小的结构:

typedef struct inode {
int fileSize;
int fileType;
int* blockPointer[30];
} inodeFile;

我想要做的是在块上覆盖此结构。我需要每个块包含4个inode结构,但是每个结构都可能没有任何与之关联的值,直到程序中的稍后。例如:

((*inodeFile) block)->fileSize = 10;

如果我理解正确,这是将指针块的前4个字节设置为fileSize。我会继续为结构的每个字段执行此操作。

我的问题是,我如何为4种不同的inode做到这一点?由于有4个不同的inode,如何为不同的结构返回每个字段的值?似乎只是说block-> fileSize不起作用,因为最多可以有四种不同的文件大小。

1 个答案:

答案 0 :(得分:0)

您可以使用union覆盖扇区上的块。因为字段是int类型或指针或大小512,所以只要自然大小为32位,就不应该存在对齐问题。

typedef struct {
    int fileSize;
    int fileType;
    int* blockPointer[30];
} inode;

typedef union {
    unsigned char bytes[512];
    inode block[4];
} sector;

int main()
{
    sector thisec;
    thisec.bytes[511] = 0;
    thisec.block[0].fileSize = 10;
    return 0;
}