• ベストアンサー

unsigned *という宣言について

char *str = "\x01\x23\x45\x67\x89\xab\xcd\xef"; unsigned *u = (unsigned *)(str + 1); このようなコードをみかけたのですが、 unsigned *uという宣言が理解できません。 これはどのような型として解釈されているのでしょうか? 暗黙でunsigned int* uと解釈されるのでしょうか?

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

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

C言語の規格でもなかなかしっくりくることが書かれていませんが。。 (わたしが読みすごしてるだけかもしれませんが) C99では宣言指定子列の中で少なくとも1つの型指定子を 指定しなければなりません、そして型指定子の並びには 次のような型が同型として規定されているようです。 (他の型は省略してます) - int, signed int, signed - unsigned, unsigned int なので、上記の下段から「unsigned = unsigned int」で 良いと思います。 ただし、int型の場合はsigned intであるかunsigned intであるかは 処理系に依存する事が明記されています。 #現存する殆どの処理系はsigned intかな。

toshiaki33
質問者

お礼

勉強になります。ありがとうございます。

その他の回答 (4)

  • crew21
  • ベストアンサー率26% (58/222)
回答No.5

unsigned int* u だよ。 つか、こんな書き方するプログラマどついとけ! 厳密に言や、あんたの無知識ということになるけど、こんな非常識な書き方するプログラマの方が悪いよ。 うちの会社でこんな書き方したら、コードレビュー時につるし上げです。

toshiaki33
質問者

お礼

ありがとうございます。 多分intを付け忘れたのだと思います。 僕もよくconst i = 3; みたいな感じでintを付け忘れるポカをします…

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

No2です。 >それはビットフィールドの場合です。 読み返したら直前に思いっきり書いてありました・・・orz ありがとうございます。 No2の一番最後は忘れてください;

toshiaki33
質問者

お礼

了解です。ありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> ただし、int型の場合はsigned intであるかunsigned intであるかは > 処理系に依存する事が明記されています。 それはビットフィールドの場合です。 intは「標準符号付き整数型」ですから、ビットフィールドを除き、常に符号付です。 > #現存する殆どの処理系はsigned intかな。 ビットフィールドに関しては、これは当てはまりません。

toshiaki33
質問者

お礼

なるほど。ありがとうございます。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

> 暗黙でunsigned int* uと解釈されるのでしょうか? 正解です。 unsigned int* と解釈されます。

toshiaki33
質問者

お礼

ありがとうございます。

関連するQ&A