• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数)

ポインタ変数とは?自身のアドレスと他の変数の値を格納する

このQ&Aのポイント
  • ポインタ変数は、他の変数のアドレスと値を格納するための変数です。
  • ポインタ変数を宣言すると、自分自身のアドレスを持ちます。
  • ポインタ変数は通常の変数とは異なり、他の変数のアドレスや値を格納することができます。

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

  • ベストアンサー
  • furyfox
  • ベストアンサー率56% (58/103)
回答No.1

>ポインタ変数なんですが、 >int *p;と宣言した時 >自分自身のアドレスを持ってますか?(プログラムが終わるまで?) 持っています。 void fnc(){ int *p; } とした場合はスタックにint*があるので、fnc関数終了時に廃棄されます。 int *p; void fnc(){ } のようにグローバルに確保すればプログラムが終わるまで持つことになります。 >ポインタ変数は、他の変数アドレスを格納しますよね。 そうです。 >また数値の値も格納しますよね。 いいえ。アドレスのみです。 int* p; だけではポインタの参照先がありません。 int* p; int i; p = &i; とするように数値の値を格納する領域は別に必要です。 >ポインタ自身のアドレス出力は(int *pの時) >printf("%p",&p); そうです。 >他の変数のアドレス出力は(p=&の時) >printf("%p",p); >であってますか? そうです。上記(p = &i;)の場合ではiのアドレスになります。

noname#168725
質問者

お礼

すばやい回答ありがとうございました。 グローバル変数時の時など 勉強になりました。 詳しく教えていただきありがとうございました

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

その他の回答 (1)

  • furyfox
  • ベストアンサー率56% (58/103)
回答No.2

#1です。 図入りがわかりやすいと思うので書いてみました。 ずれるので下記をノートパッド等に貼り付けて 「MSゴシック」等 (MS P ゴシックではない)プロポーショナルでないフォントで見てください。 |10|11|12|13|14|15|16|17| というメモリ領域があったとして intのサイズが4バイト、int*のサイズが4バイトだったと しましょう。 int* p; int i; でpがアドレス10番~13番 iがアドレス14番~17番に格納されるとします。 |10|11|12|13|14|15|16|17| |_____p_____|_____i_____| int* p; int i; i = 222; p = &i; とするとメモリ内には |10|11|12|13|14|15|16|17| |_____14____|____222____| というものがはいっているわけです。 printf("%d",&p);は10 printf("%d",p);は14 printf("%d",*p);は222 printf("%d",&i);は14 printf("%d",i);は222 ※あくまでわかりやすく説明する為の例です。

noname#168725
質問者

お礼

回答ありがとうございました。 ポインタにはアドレスのみ格納されるのですね。 図の解説どうもありがとうございました。

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

関連するQ&A