Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のダブルポインター(ポインターへのポインター)とは?基本をわかりやすく解説

ポインターは、変数のメモリアドレスを格納するために使用される変数です。そして「ポインターへのポインター」、いわゆるダブルポインターを定義した場合、最初のポインターには2番目のポインターのアドレスが格納されます。このような構造になっていることから、ダブルポインターと呼ばれています。

アルゴリズム

開始
    整数型の変数 v を宣言する。
    v = 76 で初期化する。
    整数型のポインター p1 を宣言する。
    整数型のもう1つのダブルポインター p2 を宣言する。
    p1 を変数 v へのポインターとして初期化する。
    p2 をポインター p1 へのポインターとして初期化する。
    「vの値」を出力する。
    変数 v の値を表示する。
    「シングルポインターを使ったvの値」を出力する。
    ポインター p1 の値を表示する。
    「ダブルポインターを使ったvの値」を出力する。
    ダブルポインター p2 の値を表示する。
終了。

サンプルプログラム

ダブルポインターの仕組みを理解するためのシンプルなC言語プログラムを以下に示します。

#include <stdio.h>

int main() {
    int v = 76;
    int *p1;
    int **p2;
    p1 = &v;
    p2 = &p1;
    printf("Value of v = %d\n", v);
    printf("Value of v using single pointer = %d\n", *p1);
    printf("Value of v using double pointer = %d\n", **p2);
    return 0;
}

実行結果

Value of v = 76
Value of v using single pointer = 76
Value of v using double pointer = 76

解説

変数 v には値 76 が格納されています。ポインター p1v のアドレスを保持しており、ダブルポインター p2 はさらにその p1 のアドレスを保持しています。

*p1 と記述すると、1段階の間接参照によって v の値にアクセスできます。同様に **p2 と記述すると、2段階の間接参照を経由して v の値を取得できます。このように、間接参照の段階を重ねることで、複数のポインターを経由して目的の変数にアクセスするのが、ダブルポインターの基本的な使い方です。


  1. データ構造入門:ダブルハッシュ法の仕組みと計算例をわかりやすく解説

    ダブルハッシュ法とは ダブルハッシュ(Double Hashing)は、ハッシュテーブルの衝突解決手法である「オープンアドレス法」の一種です。基本となるハッシュ関数 h′(x):U → {0, 1, …, m−1} に対して、挿入先のセルがすでに使用中だった場合に、もう一つのハッシュ関数を組み合わせて新しい格納位置を求めます。 ダブルハッシュでは、次の2つの補助ハッシュ関数を定義します。 第1ハッシュ関数: h₁(x) = x mod m第2ハッシュ関数: h₂(x) = x mod m′合成ハッシュ関数: h(x, i) = (h₁(x) + i·h₂(x)) mod m ここで i は

  2. Double DES(ダブルDES)とは?仕組みと中間一致攻撃のリスクを徹底解説

    DES(データ暗号化標準)の基礎知識DES(Data Encryption Standard:データ暗号化標準)は対称鍵ブロック暗号の一種で、64ビットの平文と56ビットの鍵を入力として受け取り、64ビットの暗号文を出力します。DESの処理はPボックスとSボックスによって構成されており、Pボックスがビットを転置し、Sボックスがビットを置換することで暗号文を生成します。DESは「LUCIFER」と呼ばれるFeistelブロック暗号の実装であり、16ラウンドからなるFeistel構造を採用しているのが特徴です。各ラウンドでは異なる部分鍵を使用できます。DESを学ぶことの大きな意義は、それが数多くの