• 締切済み

sizeofとポインタ

char *p; printf("%d",sizeof(*p)); これでなぜ1が出力されるのか分かりません。お願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.9

すんません, 「int の」とあると, 「int 以外は決まっている」という解釈も可能なもので>#7. ちなみに sizeof は「バイト数」を返すとなっているんだけど C の規格では char は必ず 1バイトだから 1 と表示す... あれ? 規格上 printf("%d", sizeof(char)) で何が表示されるかは決まってない....

noname#137556
noname#137556
回答No.8

あ,1バイトが 16 ビットということもありうるのか orz

noname#137556
noname#137556
回答No.7

> #6 そだね。 # int 以外については何も言及していないつもりだったのだが。 それはそうと, int は最低でも2バイトだったと思ったけど,それも直接には決まってないのね。 INT_MAX の最小値(32767)が決まってたりするから,結局そうなるってことかな。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

「int の」というか, 「(signed/unsigned を含む) char 以外」は全て処理系定義だったような気がする>#5. 言語仕様としては sizeof(int) は 1以上の任意の整数値 (もちろん size_t 型) でありうる. とはいえ, 9 とか 13 とかの変態な値を使うことはほとんどないだろうが....

noname#137556
noname#137556
回答No.5

> またchar *pの部分がint *pだったら4ですか? int のサイズは処理系に依存するので, 4 だったり,2 だったり,それ以外かもしれない。

noname#137556
noname#137556
回答No.4

char *p; この宣言は, *p が char 型と読むと良いです。 複雑な宣言になっても対応できる。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

pが「char型へのポインタ」だから *p はその実体である「char型」 sizeof(*p) == sizeof(char) == 1 sizeof(char)==1と、Cの規格では決っている。 ポインタのサイズを知りたいなら 式での指定なら sizeof(p) 型での指定なら sizeof(char *) charに限らず XXX * pt ; だったら、 pt は「XXX型へのポインタ」(あるいは、 「(XXX *)型」の変数、と考える) *pt はその実体で「XXX型」 sizeof(*pt) == sizeof(XXX) sizeof(pt) == sizeof(XXX *)

回答No.2

pはポインタですが、*pはcharだから1で問題ありません。

ricefield-
質問者

お礼

有難うございました。

回答No.1

pはchar *型なので、*pはchar型 よってsizeof(*p) == 1

ricefield-
質問者

お礼

有難うございました。

ricefield-
質問者

補足

p*=charと一緒だということで良いのでしょうか? またchar *pの部分がint *pだったら4ですか?

関連するQ&A