目次
概要
C++のポインタを使うことで、別の変数のアドレスを通じて、その値を直接書き換えることが可能になります。これは「間接参照(dereference)」と呼ばれ、C++のメモリ操作において基本かつ重要な概念です。
本記事では、ポインタを用いて変数の値を変更する方法を、誤った記述例と正しい方法を交えて、丁寧に解説いたします。
よくある間違ったコード(エラーの原因)
まずは、誤って書かれたコードの例を確認しておきましょう。
#include <iostream>
using namespace std;
int main()
{
int value = 10;
int* ptr;
ptr = &value;
cout << "変数valueの初期値は " << value << " です。" << endl;
// ★間違い:ポインタそのものに値を代入している
ptr = 100;
cout << "ポインタptrに100を代入しました。" << endl;
cout << "変数valueの値は " << value << " です。" << endl;
return 0;
}
なぜ間違いなのか?
ptr = 100;
は「ポインタ変数に整数100をアドレスとして代入している」ことになります。int* ptr
は アドレスを扱う変数なので、直接数値を代入するのは未定義動作になります。- 変数
value
の値は変更されません。
正しい書き方:ポインタを使って変数を変更する
#include <iostream>
using namespace std;
int main()
{
int number = 10;
int* pNumber;
pNumber = &number;
cout << "初期の変数numberの値は " << number << " です。" << endl;
// ★間接参照を使って値を変更
*pNumber = 100;
cout << "ポインタpNumberを使って値を変更しました。" << endl;
cout << "現在の変数numberの値は " << number << " です。" << endl;
return 0;
}
実行結果のイメージ
初期の変数numberの値は 10 です。
ポインタpNumberを使って値を変更しました。
現在の変数numberの値は 100 です。
コード解説
記述 | 意味 |
---|---|
pNumber = &number; | number のアドレスをポインタに代入する |
*pNumber = 100; | ポインタが指す変数(number)に 100 を代入 |
このように、ポインタを経由して変数の中身を変更することができます。*ポインタ名
に代入することで、直接的に参照先の値を操作できます。
応用例
- 関数内での参照渡し(Call by Reference)
- 配列の要素をポインタで操作
- 動的メモリの内容変更
- クラスや構造体のメンバ操作
まとめ
本記事では、ポインタを使って変数の値を変更する正しい方法を解説いたしました。
処理 | 記述例 |
---|---|
変数のアドレスを取得 | p = &x; |
変数の値を参照・変更 | *p = 新しい値; |
ポインタは強力なツールである一方、誤用すると未定義動作やクラッシュの原因になります。まずは今回のような基本操作を確実に理解し、正しく活用できるようにしましょう。