この人頭いいなと思ったエピソード

char *str = "\x01\x23\x45\x67\x89\xab\xcd\xef";
unsigned *u = (unsigned *)(str + 1);

このようなコードをみかけたのですが、
unsigned *uという宣言が理解できません。
これはどのような型として解釈されているのでしょうか?
暗黙でunsigned int* uと解釈されるのでしょうか?

A 回答 (5件)

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



正解です。
unsigned int*
と解釈されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2007/10/13 21:42

C言語の規格でもなかなかしっくりくることが書かれていませんが。


(わたしが読みすごしてるだけかもしれませんが)

C99では宣言指定子列の中で少なくとも1つの型指定子を
指定しなければなりません、そして型指定子の並びには
次のような型が同型として規定されているようです。
(他の型は省略してます)
- int, signed int, signed
- unsigned, unsigned int

なので、上記の下段から「unsigned = unsigned int」で
良いと思います。

ただし、int型の場合はsigned intであるかunsigned intであるかは
処理系に依存する事が明記されています。
#現存する殆どの処理系はsigned intかな。
    • good
    • 2
この回答へのお礼

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

お礼日時:2007/10/13 21:41

> ただし、int型の場合はsigned intであるかunsigned intであるかは


> 処理系に依存する事が明記されています。

それはビットフィールドの場合です。
intは「標準符号付き整数型」ですから、ビットフィールドを除き、常に符号付です。

> #現存する殆どの処理系はsigned intかな。

ビットフィールドに関しては、これは当てはまりません。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/10/13 21:40

No2です。


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

No2の一番最後は忘れてください;
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/10/13 21:40

unsigned int* u だよ。



つか、こんな書き方するプログラマどついとけ!
厳密に言や、あんたの無知識ということになるけど、こんな非常識な書き方するプログラマの方が悪いよ。

うちの会社でこんな書き方したら、コードレビュー時につるし上げです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/10/13 21:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報