C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!
C++のポインタ(Pointer)は、「変数のアドレス(場所)」を記憶する変数です。
他の変数を間接的に操作できるため、関数間のデータの受け渡しや動的メモリ確保などに広く使われます。
この記事では、ポインタの基本的な使い方、参照との違い、注意点などを初心者向けにわかりやすく解説します。
ポインタとは?
ポインタとは、メモリ上のアドレスを保存するための変数です。
通常の変数は値を保持しますが、ポインタは他の変数の場所(アドレス)を記録します。
基本構文と使い方
int a = 10;
int* p = &a; // aのアドレスをpに代入
cout << *p << endl; // → 10(ポインタを通じて値を取得)
*p = 20; // ポインタを通じてaの値を変更
cout << a << endl; // → 20
記号 | 意味 |
* | ポインタの定義または値の参照(間接参照) |
& | 変数のアドレスを取得 |
ポインタを使った関数への参照渡し
ポインタを使えば、関数内で呼び出し元の変数の値を変更できます。
void addTen(int* x) {
*x += 10;
}
int main() {
int num = 5;
addTen(&num);
cout << num << endl; // → 15
}
NULLポインタとnullptr
何も指していないポインタは「NULLポインタ」と呼ばれます。
C++11以降は nullptr
を使うのが推奨されています。
int* ptr = nullptr;
if (ptr == nullptr) {
cout << "無効なポインタです。" << endl;
}
動的メモリ確保とポインタ
int* data = new int; // メモリ確保
*data = 100;
cout << *data << endl; // → 100
delete data; // メモリ解放
new
と delete
を使うことで、実行時に必要なメモリを自由に確保・解放できます。
参照との違い
項目 | ポインタ | 参照 |
アドレスを保持 | ○ | ×(内部的には保持しているが操作不可) |
再代入 | 可(他の変数を指せる) | 不可(一度設定したら固定) |
nullを取れる | ○(nullptrあり) | ×(必ず有効な変数を参照) |
柔軟性 | 高い | シンプルで安全 |
ポインタのメリット
- メモリ操作ができる
動的なプログラム設計に対応。
- 関数間で変数の共有ができる
値を直接変更可能。
- 配列や構造体と相性が良い
アドレスを使って柔軟に操作できる。
注意点
- 未初期化のポインタを使うと未定義動作(バグ)になります。
delete
忘れによるメモリリークに注意。
delete
したポインタを再び使うと危険(ダングリングポインタ)になります。
まとめ
C++のポインタは、変数のアドレスを操作するための強力なツールです。
参照よりも柔軟ですが、誤った使い方をするとバグの原因にもなります。
まずは基本的なポインタの使い方から始めて、動的メモリや関数での応用など、徐々に活用の幅を広げていきましょう!