ポインタのサイズ(1/2)

解決済みの質問

ポインタのサイズ

ポインタのサイズは、

int型のポインタでも、char型のポインタでも、
doubleのポインタでも、構造体のポインタでも、
全部サイズは4バイトです。

というのを見かけましたが、ほんとうですか?
教えてください。

投稿日時 - 2006-12-29 21:27:37

QNo.2633268

困ってます

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

PIC等のマイクロコンピュータでは、メモリモデルにより違いますが、16ビットと24ビットがポインタのサイズでした。
(参考URLをご覧下さい)

「C言語では」と聞かれると、処理系(CPU,アーキテクチャ,コンパイラ,OS)に依ってマチマチになりますし、
「これこれの処理系」と聞かれれば、こうです、と定まった答えが出ます。


C言語は高級言語の皮をかぶったアセンブラみたいなものですから、不親切に思える「なぜ、なに」がたくさん出てきます。
Cの言語仕様とライブラリAPIを超えた範囲にも目を向けて勉強していただきたいと思います。
(特にCPUとメモリ、スタックの使われ方など)

参考URL:http://ww1.microchip.com/downloads/en/DeviceDoc/51288C_JP.pdf

投稿日時 - 2006-12-30 10:48:02

お礼

回答どうもありがとうございます!
詳しい解説ありがとうありがとうございます。
自分には難しそうですが、参考になります!
ありがとうございます!

投稿日時 - 2007-01-02 22:41:19

ANo.7

7人が「このQ&Aが役に立った」と投票しています

[  前へ  |  ]

ベストアンサー以外の回答(10件中 1~5件目)

ANo.11

失礼。longだとLONG_MINには拘束されますね。
(ISO/IEC14882 $18.2.2, ISO/IEC9899 $5.4.2.1あたり)

# 蛇足:intptr_t等の定義はC99以降、現状では処理系を選びます。
# (とはいえstdint.hくらいなら仕様片手に自作できるでしょうが)

投稿日時 - 2006-12-31 19:25:46

ANo.10

確かに個々の型の大きさは処理系定義ですが, 最低の大きさが規格にあります. で, long は最低 32bit なので「long が 24bit」はアウトです>#9
あと, 「どうしてもポインタの値を整数型の変数に入れたい」というときには intptr_t または uintptr_t を使うのがベスト.

投稿日時 - 2006-12-31 02:55:32

ANo.9

> この型名は規格上は OK なんでしょうか?
これがもしも「shortが24bit」または「longが24bit」なら処理系定義なのでOKですが、
「short long」という型名は言語仕様的には違反ですね。

「標準の型を提供。さらに、独自の型を提供」という説明ですし、
処理系の独自拡張ということになると思います。一般性はありません。

投稿日時 - 2006-12-30 12:18:49

ANo.8

#7 さんの参考 URLを見ると,short long 型 (24ビット) なんてのがあるんですね! (11ページ)
この型名は規格上は OK なんでしょうか?

投稿日時 - 2006-12-30 12:01:32

ANo.6

皆さん書かれてる通り、OS、コンパイラ、実記環境(32bit、64bit)等に左右されます。

とはいえ、32ビット環境に限った話をすると質問条件に合うポインタは4バイトとなるケースが多いとは言えます。

但し、こういう定義されてない物は必ずsizeof()等でサイズ取得した方がコードの汎用性高くなります。(グレー扱いするのが常套手段です。)

投稿日時 - 2006-12-30 08:42:22

お礼

すばやい回答ありがとうございます!
的確なご指摘参考になりました!

投稿日時 - 2007-01-02 22:33:27

あわせてチェックしたい
  • 構造体へのポインタについて ...
  • 構造体の配列 char *' 型は 'char' 型に変換できない ...
  • ポインタ ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら