64
次のコードに出力がある理由は何ですか?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
64
次のコードに出力がある理由は何ですか?
void main()
{
int i=320;
char *ptr=(char *)&i;
printf("%d",*ptr);
}
実装が定義されています。プラットフォームのエンディアンとsizeof(int)によって異なります。基本的に、intをそれ自体の最初のバイトに切り捨てます。これは、明らかにシステム上で最下位ビットです。
320 = 0x00 00 01 40そして常に1バイトであるcharに切り捨てることによって:0x40 = 64
それが理由です。
編集:ダニエル・フィッシャーが指摘したように、これはCHAR_BIT
<= 8であるかどうかにも依存します(これは、今日のすべてではないにしても、ほとんどのシステムにあります)。
char
ポインターです。したがって、 1 バイトを指します。320 は 1 バイトに収まりません。
320 は 0x0140 です
64 は 0x0040 です
int 値の下位バイトのみを読み取っています。
に関連付けられたメモリi
は、320 または0x0140
.
次に、この整数へのポインターを取得し、char
(1 バイト) へのポインターとしてキャストします。
次に、このアドレスの値、この場合0x40
は LSB を出力します。これがあなたの値の 64 です。
他の実装では、MSB を取得します。これは、0x01
または値 1 になります。