通常、short
変数は 2 バイト アライン アドレスでなければなりませんが、奇数アドレスを指定しようとしても問題はありませんか?
このコードを VC++ 2008 で試してみましたが、正しく動作するので、その理由を説明していただけますか?
unsigned char ca[10];
unsigned short *s1 = 0;
memset(ca, 1, 10);
s1 = (unsigned short*)&ca[0];
printf("s1 = %d\n", *s1);
s1 = (unsigned short*)&ca[1];
printf("s1 = %d\n", *s1);
上記のコード スニペットでは、ca[0]
またはca[1]
確かに奇数アドレスに 1 つあるため、2 バイト アラインメントではありませんが、と の両方にs1
完全に割り当てられます。ca[0]
ca[1]
では、このコードは正しく、この方法で実行することをお勧めしますか? ほとんどすべてのプラットフォーム/コンパイラでうまく機能するように、バイト配列内の任意の 2 バイトを短い変数として読み取る移植可能なメソッドが必要です。
どうもありがとうございました。