• ベストアンサー

C++ ポインタ 認識はこれでただしいですか?

int i=3;// iが格納されてるアドレスは001とする そこに3の値 int *pi;// piが格納されているアドレスは//002とする pi=&i;// アドレス002にある値に001が入る printf("%p",pi);//001が表示 printf("%d",*pi);//アドレス001を参照して3を表示 printf("%p",&pi);//002が表示 Q1 このイメージであってますか? Q2 *pi= の右辺は&i,iなどいれられない   代入するときは宣言以外のときは   pi=&i のようにpi= という形にして右辺はアドレスをいれ なければならない。  これであってますか? Q3 char *pc; pc="ABCDE";//ABCDEは文字定数領域に記憶される //文字Aがアドレス(仮)005、Bが006にはいっていたとしたら ↑の式はpc=005;という意味でアドレスを代入している これでいいでしょうか?

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

  • ベストアンサー
  • momenlara
  • ベストアンサー率60% (6/10)
回答No.1

Q1、Q3については問題ないかと思います。 Q2は条件によってなんとも言いがたいですね。 例えば、以下は問題ないパターンです。 int i=3; // アドレスは001 int *pi; // アドレスは002 int j=4; // アドレスは003 pi = &i; *pi = j; printf("%d", *pi); // 4が表示される *pi = (int)&j; printf("%p", *pi); // 003が表示される お気づきのとおりアドレスの実体は整数値ですので、 intにキャストしてあげれば*pi=の右辺にアドレスを指定することも可能です。 ただし、以下のようなパターンはエラーになります。 int i=3; int *pi; *pi = i; // やってはいけない! *pi = &i; // やってはいけない! 違いはポインタ変数piに有効なアドレスが代入されていないという点です。 この場合、メモリのどこか分からない適当なアドレス位置に代入をおこなおうとしているので、エラーになる可能性があります。 もしpiが000を指していると、いわゆるぬるぽになります。

exceln
質問者

お礼

1,3が間違ってないことがわかり安心しました。 2はかゆいところまで教えていただき助かりました 回答ありがとうございました。

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

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

>pi = &i; >*pi = j; >printf("%d", *pi); // 4が表示される *pi = j; の文は冗長です。 pi = &i; printf("%d", *pi); // 4が表示される でじゅうぶんです。

exceln
質問者

お礼

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

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

関連するQ&A