• ベストアンサー

C言語:アウトプット引数のキャストについて

以下のサンプルソースのように、(1)の場合、出力結果が24にならないのはなぜでしょうか?基礎的な質問だと思いますがよろしくお願いします。 --------------------------------------- サンプルソース #include <stdio.h> int getValue(unsigned short* us){ *us = 24; } main(){ int ret = 0; int intVal = 0; unsigned short usVal = 0; /* (1)int型のintValをunsigned short型にキャストした場合 */ ret = getValue((unsigned short*)&intVal); printf("%d\n", intVal); /* (2)unsigned short型のusValをそのまま引数に渡した場合 */ ret = getValue(&usVal); printf("%d\n", usVal); } ---------------------------------- 出力結果 1572864 ←(1)の結果 24 ←(2)の結果 -----------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

CPUがビッグエンディアンだからでしょうね。 00 00 00 00(0x00000000=0) ↓00 18(0x0018=24)を書き込む 00 18 00 00(0x00180000=1572864) リトルエンディアンだとこう。 00 00 00 00(0x00000000=0) ↓18 00(0x0018=24)を書き込む 18 00 00 00(0x00000018=24)

BIGMON
質問者

お礼

ありがとうございました。当方勉強不足でした。アウトプットの引数のキャストには気をつけます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>リトルエンディアンでintが32bitでしたらそうなるかと。 きゃー(^^;;なにねぼけてるんでしょ! ビッグエンディアンですよね。

BIGMON
質問者

お礼

おっしゃるとおりintが32bitです。OSはwindows2000です。ありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

OSやプラットフォームがかかれていないのですが、 リトルエンディアンでintが32bitでしたらそうなるかと。 1572864 = 0x180000 24 = 0x18 ですから。

関連するQ&A