• ベストアンサー

ポインタがわからない

C言語初心者です。 Int num; Int  *p=# という変数を宣言したとします。 下は「int *型」と呼び、pは「int型オブジェクトであるnumを指すポインタ」であることはわかりました。 ですが、「int型」と「int  *型」そのものの違いがわかりません。 たとえば、今読んでいるテキストに Printf(“int 型は%uバイトです。\n”,(unsigned)sizeof(int));→結果は2バイト Printf(“int *型は%uバイトです。\n”,(unsigned)sizeof(int *));→結果は4バイト 僕の環境では両方とも4バイトと結果は変わりませんでしたがテキストでは結果は上記のように変わってきてしまうようでした。これはなぜ変わってくるのでしょうか? 「int型」と「int  *型」そのものを比較した際の違いがわかりません。

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

  • ベストアンサー
  • kent_a
  • ベストアンサー率18% (36/199)
回答No.1

ポインタとアドレスを入れる領域です。 int型は環境にサイズ(バイト)が異なります。 テキストは16bitのOSであなは32bitのOSを使っているのでは? int *もlong *もchar *もバイト数はすべて4バイトになります。 ってことは型に関係なくアドレスは4バイトなのです。

rinnshan
質問者

お礼

なるほどint *型はポインタ型でありアドレスを入れる領域 なのですべて決まった型になるのですね。 最後の文章を見てやっとわかりました^^ ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.4

連番のついた封筒がたくさんあると思ってください この「連番」が「アドレス」です int num; num = 10; と書くと 「&num番の封筒」に「10」と書かれた紙が入ります int *p = # と書くと 「p番の封筒」に「&num番の封筒を見ろ」と書かれた紙が入ります ポインタの考え方はこんな感じ。 テキストと質問者さんで実行結果が違ったのは、想定しているシステムが違うから。 テキストでは 「intは2バイト、アドレスは4バイト」というシステムを想定しているのに対し 質問者さんの環境は 「intは4バイト、アドレスは4バイト」というシステムになっている 具体的には、int型で扱える数値の範囲が違う。 テキストの環境(2バイト)では、-32768~32767 質問者さんの環境(4バイト)では、-2147483647~ 2147483647 の範囲を扱える(実際には他の制限によってこれより狭いこともある) 「C言語」としての規定(ANSIの規定)では、intの範囲は「少なくとも-32767~32767」となっている(筈)

rinnshan
質問者

お礼

環境による違いまでを説明していただき まことにありがとうございました^^

すると、全ての回答が全文表示されます。
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

C言語で最も難解なものの一つがポインターです。 ヒントを差し上げましょう。 1.Windowsの場合、ショートカットアイコンがありますね。   プログラムやファイルではなくそのありかを示しています。 2.建物を訪問するときに判りにくい所に案内板が立ててあったりします。 これら2つはポインターに良く似ています。 変数そのものではなく変数のありか(アドレス)を持っています。 これが何故便利かというと変数のありかが変わっても(扱う変数)が変わってもショートカットアイコンや案内板を書き換えるだけですむと言うことです。 従ってバイト数は当然変わります。この辺は機種やコンパイラーに依存して買えてよいことになっています。

rinnshan
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

>これはなぜ変わってくるのでしょうか? int型を使用している為です。 int型は「環境依存型」であり、そのサイズ(扱える数値の範囲)は環境により違います。 テキストは「16bit」、質問者さんの環境は「32bit」でintを扱っています。 >「int型」と「int  *型」そのものを比較した際の違いがわかりません。 テキストでは、「int*はポインタ型なのでint型とはサイズが違う」と説明したかったのでしょう。 例が悪かったとしか言いようがありません。 せめて、char型ならわかりやすかったと思いますが。

rinnshan
質問者

お礼

「int*はポインタ型なのでint型とはサイズが違う」という 文章を見てint*型はintとはいわば全く別の型なのだと わかりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A