- 締切済み
sizeofとポインタ
char *p; printf("%d",sizeof(*p)); これでなぜ1が出力されるのか分かりません。お願いします。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
すんません, 「int の」とあると, 「int 以外は決まっている」という解釈も可能なもので>#7. ちなみに sizeof は「バイト数」を返すとなっているんだけど C の規格では char は必ず 1バイトだから 1 と表示す... あれ? 規格上 printf("%d", sizeof(char)) で何が表示されるかは決まってない....
あ,1バイトが 16 ビットということもありうるのか orz
> #6 そだね。 # int 以外については何も言及していないつもりだったのだが。 それはそうと, int は最低でも2バイトだったと思ったけど,それも直接には決まってないのね。 INT_MAX の最小値(32767)が決まってたりするから,結局そうなるってことかな。
- Tacosan
- ベストアンサー率23% (3656/15482)
「int の」というか, 「(signed/unsigned を含む) char 以外」は全て処理系定義だったような気がする>#5. 言語仕様としては sizeof(int) は 1以上の任意の整数値 (もちろん size_t 型) でありうる. とはいえ, 9 とか 13 とかの変態な値を使うことはほとんどないだろうが....
> またchar *pの部分がint *pだったら4ですか? int のサイズは処理系に依存するので, 4 だったり,2 だったり,それ以外かもしれない。
char *p; この宣言は, *p が char 型と読むと良いです。 複雑な宣言になっても対応できる。
- kmee
- ベストアンサー率55% (1857/3366)
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 *)
- maru_yoshi_
- ベストアンサー率39% (17/43)
pはポインタですが、*pはcharだから1で問題ありません。
- yaemon_2006
- ベストアンサー率22% (50/220)
pはchar *型なので、*pはchar型 よってsizeof(*p) == 1
お礼
有難うございました。
補足
p*=charと一緒だということで良いのでしょうか? またchar *pの部分がint *pだったら4ですか?
お礼
有難うございました。