我是 C/C++ 的新手,所以我知道这个问题可能很简单,但我不明白如何继续。我已经像这样分配了 512 字节的内存块(扇区是一个大小为 512 字节的结构):
char* block = (char *) malloc (sizeof(Sector));
我有另一个 128 字节大小的结构:
typedef struct inode {
int fileSize;
int fileType;
int* blockPointer[30];
} inodeFile;
我想做的是将这个结构覆盖在 block 上。我需要每个 block 包含 4 个 inode 结构,但每个结构可能没有任何与之关联的值,直到稍后在程序中。例如:
((*inodeFile) block)->fileSize = 10;
如果我没理解错的话,这是将指针 block 的前 4 个字节设置为 fileSize。我将继续为结构的每个字段执行此操作。
我的问题是,如何为 4 个不同的 inode 执行此操作?由于有 4 个不同的 inode,我如何返回不同结构的每个字段的值?似乎简单地说 block->fileSize 是行不通的,因为最多可以有四种不同的文件大小。
最佳答案
您可以使用union
将 block 覆盖在扇区上。因为字段是 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;
}
关于c - 声明多个结构并将它们覆盖在已分配的内存上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279083/