- ベストアンサー
unsigned *という宣言について
char *str = "\x01\x23\x45\x67\x89\xab\xcd\xef"; unsigned *u = (unsigned *)(str + 1); このようなコードをみかけたのですが、 unsigned *uという宣言が理解できません。 これはどのような型として解釈されているのでしょうか? 暗黙でunsigned int* uと解釈されるのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
C言語の規格でもなかなかしっくりくることが書かれていませんが。。 (わたしが読みすごしてるだけかもしれませんが) C99では宣言指定子列の中で少なくとも1つの型指定子を 指定しなければなりません、そして型指定子の並びには 次のような型が同型として規定されているようです。 (他の型は省略してます) - int, signed int, signed - unsigned, unsigned int なので、上記の下段から「unsigned = unsigned int」で 良いと思います。 ただし、int型の場合はsigned intであるかunsigned intであるかは 処理系に依存する事が明記されています。 #現存する殆どの処理系はsigned intかな。
その他の回答 (4)
- crew21
- ベストアンサー率26% (58/222)
unsigned int* u だよ。 つか、こんな書き方するプログラマどついとけ! 厳密に言や、あんたの無知識ということになるけど、こんな非常識な書き方するプログラマの方が悪いよ。 うちの会社でこんな書き方したら、コードレビュー時につるし上げです。
お礼
ありがとうございます。 多分intを付け忘れたのだと思います。 僕もよくconst i = 3; みたいな感じでintを付け忘れるポカをします…
- aris-wiz
- ベストアンサー率38% (96/252)
No2です。 >それはビットフィールドの場合です。 読み返したら直前に思いっきり書いてありました・・・orz ありがとうございます。 No2の一番最後は忘れてください;
お礼
了解です。ありがとうございます。
- jacta
- ベストアンサー率26% (845/3158)
> ただし、int型の場合はsigned intであるかunsigned intであるかは > 処理系に依存する事が明記されています。 それはビットフィールドの場合です。 intは「標準符号付き整数型」ですから、ビットフィールドを除き、常に符号付です。 > #現存する殆どの処理系はsigned intかな。 ビットフィールドに関しては、これは当てはまりません。
お礼
なるほど。ありがとうございます。
- mac_res
- ベストアンサー率36% (568/1571)
> 暗黙でunsigned int* uと解釈されるのでしょうか? 正解です。 unsigned int* と解釈されます。
お礼
ありがとうございます。
お礼
勉強になります。ありがとうございます。