1
Please explain the output of below program....

int main()
{
unsigned int i=0,j=0;
char c = 'J';
         i = (unsigned int) c;
         i|=(unsigned int) (c+1)<<8;
         i|= (unsigned int) (c+2) <<16;
         i|= (unsigned int) (c+3) <<24;
printf("\n%s",&i);
}

上記のプログラムの出力は JKLM として表示されます。理由を説明してください??

4

2 に答える 2

7

標準的なつまらない答え: プログラムには未定義の動作があるためです。%s変換指定子は または 引数を想定していchar *ますunsigned char *が、unsigned int *.

カーテンの後ろを見てください: あなたのマシンはおそらくリトル エンディアンなので、最下位バイトのメモリ アドレスが最小になります。

于 2013-09-21T06:28:42.607 に答える
3

あなたのシステムはリトル エンディアンのようです ( http://en.wikipedia.org/wiki/Endianness )。これは、最下位バイト (シフトなしのバイト) が、%s が期待する文字配列の最初のバイトであることを意味します。

于 2013-09-21T06:28:23.070 に答える