●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

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;           // メモリ解放

newdelete を使うことで、実行時に必要なメモリを自由に確保・解放できます。

参照との違い

項目ポインタ参照
アドレスを保持×(内部的には保持しているが操作不可)
再代入可(他の変数を指せる)不可(一度設定したら固定)
nullを取れる○(nullptrあり)×(必ず有効な変数を参照)
柔軟性高いシンプルで安全

ポインタのメリット

  1. メモリ操作ができる
    動的なプログラム設計に対応。
  2. 関数間で変数の共有ができる
    値を直接変更可能。
  3. 配列や構造体と相性が良い
    アドレスを使って柔軟に操作できる。

注意点

  • 未初期化のポインタを使うと未定義動作(バグ)になります。
  • delete忘れによるメモリリークに注意。
  • deleteしたポインタを再び使うと危険(ダングリングポインタ)になります。

まとめ

C++のポインタは、変数のアドレスを操作するための強力なツールです。 参照よりも柔軟ですが、誤った使い方をするとバグの原因にもなります。

まずは基本的なポインタの使い方から始めて、動的メモリや関数での応用など、徐々に活用の幅を広げていきましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方