私はCでこのプログラムを持っています:
int main(int argc, char *argv[])
{
int i=300;
char *ptr = &i;
*++ptr=2;
printf("%d",i);
return 0;
}
リトルエンディアンの出力は556です。
出力を理解しようとしました。これが私の説明です。
質問は、答えはビッグエンディアンマシンでも同じままですか?
i = 300; => i =100101100//ワード形式のバイナリ=>BBHb 0001 00101100ここで、B =バイト、Hb=ハーフバイト
(A)=>メモリ内(リトルエンディアンであると想定))
0x12345678 - 1100 - 0010 ( Is this correct for little endian)
0x12345679 - 0001 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
0x1234567c-次の整数の位置(ptr++またはptr+ 1の位置。ptrはint=>型であるため、ptrは整数ポインターです。++ ptrを実行すると、4バイトずつ増加します(intのサイズ))
いつ
(B)char * ptr =&i;を実行します ptrはchar=>型になります。++ptrを実行すると1バイト(charのサイズ)ずつインクリメントされるため、++ ptrを実行すると、場所-> 0x12345679(0001〜0000)にジャンプします 。 + ptr = 2=>0x12345679は2で上書きされます=>0x12345679は000* 1 * -0000ではなく00*10**-0000になります
したがって、新しいメモリコンテンツは次のようになります。
(C)
0x12345678 - 1100 - 0010
0x12345679 - 0010 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
これは、=> BB Hb 0010 00101100と同等です。ここで、B =バイト、Hb=ハーフバイトです。
私の推論は正しいですか?これのための他の短い方法はありますか?Rgds、Softy