考えてみましょう私は2つの符号なしの数値をそれぞれ32ビットで1つの配列に保存しました。最初の数字は位置[0; 3]、第2の位置[4; 8]。私は今、数字の1つの値を変更するために、次のコードが許されているか問題がありますか?uint32_t *を使用してuint8_t配列の値を変更する
uint8_t array[8];
//...Fill it up...
uint32_t *ptr = NULL;
ptr = (uint32_t*)&array[0];
*ptr = 12345;
ptr = (uint32_t*)&array[4];
*ptr = 54321;
はい、それは問題があります、http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule –
有効なタイプ(別名厳密なエイリアシング)ルールに違反しています。これは明確な**です**マーシャリングを使用するビットシフト/マスキングを使って配列を読み取ることができます – Olaf
あなたは 'uint32_t'値でいっぱいになる' uint32_t'の配列を持っています: 'uint8_t *'( "あなたが気にしない限りデータ表現)。 –