c - 複数の構造体を宣言し、それらをすでに割り当てられているメモリにオーバーレイする

原文 c memory struct

私はC / C++に非常に慣れていないので、この質問はおそらく些細なことであることはわかっていますが、続行する方法がわかりません。それぞれ512バイトのメモリブロックを割り当てました(セクターはサイズ512バイトの構造体です):
char* block = (char *) malloc (sizeof(Sector));

サイズが128バイトの別の構造体があります。

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


私がしたいのは、この構造体をブロックにオーバーレイすることです。各ブロックには4つのiノード構造が含まれている必要がありますが、各構造には、プログラムの後半まで、値が関連付けられていない場合があります。だから例えば:

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

私が正しく理解している場合、これはポインターブロックの最初の4バイトをfileSizeに設定しています。構造体のフィールドごとにこれを続けます。

私の質問は、4つの異なるiノードでこれを行うにはどうすればよいですか?また、4つの異なるiノードがあるので、異なる構造体の各フィールドの値を返すにはどうすればよいですか?最大4つの異なるファイルサイズが存在する可能性があるため、単にblock-> fileSizeとすると機能しないようです。
答え
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;
}
関連記事

c - 厳格なエイリアシングを破った結果を理解する

java - Android Gstreamer SDKでANativeWindow_lockがエラー-22を返す

c - 二分木;頻度の高い順に印刷します。 C言語

c - コピーを作成するのではなく、ポインタを使い始める前に、構造はどのくらいの大きさにすべきですか? [C] [終了]

c - Cの配列で2次元配列にインデックスを付ける方法のベクトル化

c++ - ゼロパディング付きのインテルMKLを使用した3D FFT

python - プロセス間通信Python [重複]

c - C99で関数ポインターの構造がNULLかどうかを確認するクイックチェック

c - 構造体を関数に渡し、Cで変更する

c - EVP_PKEYを使用したOpenSSL RSA_size