我對C/C++非常陌生,所以我知道這個問題可能是微不足道的,但我不知道如何繼續。我已分配的各自512個字節,像這樣的存儲器塊(扇區是大小的一個結構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個字節的指針塊檔案大小的。我會繼續爲結構的每個字段執行此操作。
我的問題是,我該如何做4個不同的inode?由於有4個不同的inode,我怎樣才能返回不同結構的每個字段的值?這似乎只是說block-> fileSize不起作用,因爲最多可以有四種不同的文件大小。
爲什麼不'(((* inodeFile)塊)+1) - >檔案大小= 10;'(除了對嚴格別名問題,該方案不可避免地跑起來) – IdeaHat 2014-12-03 18:36:12
你有沒有考慮'的typedef的優點聯合InodeSector {扇區扇區; inodeFile inodes [4]; } InodeSector;'(你的首選一致大小寫/駱駝大小寫/下劃線命名方案)?在我看來,'Sector'和'inodeFile'不一致,但一致性是有益的。使用'union',您可以將數據作爲扇區或具有4個'inodeFile'條目的數組訪問。您可能仍需要注意嚴格的別名。 – 2014-12-03 18:53:05
嘗試'((inodeFile *)block)[0] .fileSize = 10;'(在類型名稱的另一側使用'[]'取消引用,以便您可以輕鬆訪問第二,第三和第四個將索引更改爲1,2或3)。 – Dmitri 2014-12-03 18:54:30