C++におけるダブルポインターの使い方と例


  1. ダブルポインターの宣言と初期化 ダブルポインターを宣言するには、2つのアスタリスク()を使用します。以下は、例です:

    int main() {
       int value = 5;
       int* pointer = &value;
       int doublePointer = &pointer;
    
       // ダブルポインターの値を表示
       std::cout << "ダブルポインターの値: " << *doublePointer << std::endl;
    
       return 0;
    }

    この例では、doublePointerpointerのアドレスを格納しています。*doublePointerを使用すると、pointerの値(valueのアドレス)にアクセスできます。

  2. ダブルポインターを使用した関数の引数としてのポインターの渡し方 ダブルポインターは、関数の引数としてポインターを渡す際に便利です。関数内でポインターの値を変更するために使用できます。以下は、例です:

    void changeValue(int pointer) {
       int newValue = 10;
       *pointer = &newValue;
    }
    
    int main() {
       int value = 5;
       int* pointer = &value;
    
       // ポインターの値を変更する関数を呼び出し
       changeValue(&pointer);
    
       // 新しい値を表示
       std::cout << "変更後の値: " << *pointer << std::endl;
    
       return 0;
    }

    この例では、changeValue関数はポインターのポインターを引数として受け取り、ポインターの値を新しいアドレスに変更します。

  3. ダブルポインターを使用した動的メモリの解放 ダブルポインターは、動的に割り当てられたメモリの解放にも使用できます。以下は、例です:

    void deallocateMemory(int doublePointer) {
       delete *doublePointer;
       *doublePointer = nullptr;
    }
    
    int main() {
       int* pointer = new int;
       *pointer = 5;
       int doublePointer = &pointer;
    
       // メモリの解放
       deallocateMemory(&doublePointer);
    
       return 0;
    }

    この例では、deallocateMemory関数はポインターのポインターを引数として受け取り、メモリを解放します。解放後、ポインターとダブルポインターはnullptrに設定されます。

これらはC++におけるダブルポインターの基本的な使用方法と例です。ダブルポインターはポインターをさらに柔軟に操作するための強力なツールですが、誤った使用はメモリ関連の問題を引き起こす可能性があるため、注意が必要です。