目次
概要
C++のポインタは、単に変数のアドレスを保持するだけでなく、途中で別の変数のアドレスに切り替えることも可能です。この性質を利用することで、柔軟かつ効率的なメモリ操作が可能になります。
本記事では、ポインタに別のアドレスを代入することで、参照先を切り替える方法を、シンプルなサンプルコードでわかりやすく解説いたします。
サンプルコード
#include <iostream>
using namespace std;
int main()
{
int numA = 30;
int numB = 60;
int* ptr;
// numA のアドレスをポインタに代入
ptr = &numA;
cout << "変数numAの値は " << numA << " です。" << endl;
cout << "ptrの値(アドレス)は " << ptr << " です。" << endl;
cout << "*ptrの参照先の値は " << *ptr << " です。" << endl;
// 参照先を numB に変更
ptr = &numB;
cout << "変数numBの値は " << numB << " です。" << endl;
cout << "ptrの値(アドレス)は " << ptr << " です。" << endl;
cout << "*ptrの参照先の値は " << *ptr << " です。" << endl;
return 0;
}
実行結果のイメージ
変数numAの値は 30 です。
ptrの値(アドレス)は 0x7ffee2f1a4b0 です。
*ptrの参照先の値は 30 です。
変数numBの値は 60 です。
ptrの値(アドレス)は 0x7ffee2f1a4b4 です。
*ptrの参照先の値は 60 です。
※ アドレス値(0x〜
)は実行環境によって異なります。
コード解説
int* ptr;
整数型のポインタを宣言します。ptr = &numA;
numA
のアドレスをポインタに代入します。この時点で*ptr
はnumA
を参照しています。ptr = &numB;
ポインタの参照先をnumB
に切り替えます。これにより*ptr
はnumB
を参照するようになります。
ポイント
記述 | 意味 |
---|---|
&変数名 | 変数のアドレスを取得する |
*ポインタ名 | ポインタが指す変数の値を取得する |
応用例
- 一つのポインタで複数の変数を順に処理する
- 関数内で処理対象の変数を切り替える
- 関数に渡す引数を柔軟に変更する
注意点
- ポインタが指すアドレスを変更すると、それまでの参照先には影響を与えません。
- 参照先を明示的に切り替えるため、意図しない書き換えを避けるには慎重な管理が必要です。
- メモリ解放(
delete
)後のポインタ再利用は未定義動作になるため、使い終わったらnullptr
を代入するなどの対策が必要です(本記事の範囲では使用しません)。
まとめ
本記事では、C++においてポインタに別の変数のアドレスを代入する方法をご紹介いたしました。
操作内容 | 記述例 |
---|---|
ポインタの初期化 | ptr = &numA; |
参照先の切り替え | ptr = &numB; |
参照先の値を取得(間接参照) | *ptr |
ポインタは「アドレスを動的に切り替える」ことが可能なため、関数設計やデータ操作を柔軟に行いたい場面で非常に役立ちます。