1

重複の可能性:
intポインターをcharポインターにキャストすると、Cのデータが失われますか?

64次のコードに出力がある理由は何ですか?

void main()
{
    int i=320;
    char *ptr=(char *)&i;
    printf("%d",*ptr);
}
4

4 に答える 4

2

実装が定義されています。プラットフォームのエンディアンとsizeof(int)によって異なります。基本的に、intをそれ自体の最初のバイトに切り捨てます。これは、明らかにシステム上で最下位ビットです。

320 = 0x00 00 01 40そして常に1バイトであるcharに切り捨てることによって:0x40 = 64

それが理由です。

編集:ダニエル・フィッシャーが指摘したように、これはCHAR_BIT<= 8であるかどうかにも依存します(これは、今日のすべてではないにしても、ほとんどのシステムにあります)。

于 2012-07-04T18:16:53.347 に答える
0

charポインターです。したがって、 1 バイトを指します。320 は 1 バイトに収まりません。

于 2012-07-04T18:17:05.660 に答える
0

320 は 0x0140 です

64 は 0x0040 です

int 値の下位バイトのみを読み取っています。

于 2012-07-04T18:18:15.133 に答える
0

に関連付けられたメモリiは、320 または0x0140.

次に、この整数へのポインターを取得し、char(1 バイト) へのポインターとしてキャストします。

次に、このアドレスの値、この場合0x40は LSB を出力します。これがあなたの値の 64 です。

他の実装では、MSB を取得します。これは、0x01または値 1 になります。

于 2012-07-04T18:19:27.287 に答える