多重間接参照

C のポインタは、別のポインタを指すことができる。これを多重間接参照と言い、最初のポインタは2番めのポインタのアドレスを保持し、2番めのポインタが変数へのアドレスを保持する。
ポインタへのポインタを宣言するには * を2つつける。

char **mp;

ポインタへのポインタが、間接的に指している値を参照するときには * 演算子を2つつける。例えば次のように。

char **mp, *p, ch;

p = &ch;     /* ch のアドレスを取得 */
mp = &p;     /* p のアドレスを取得 */
**mp = 'A'   /* 多重間接参照を使って ch に 'A' を代入 */

次のプログラムは、ポインタへのポインタを使って、 gets() で文字列を入力する。

#include

int main(void)
{
    char **mp, *p, str[80];

    p = str;
    mp = &p;

    printf("Input your name: ");
    gets(*mp);
    printf("Hello, %s!\n", *mp);

    return 0;
}

gets や printf の引数で、mp に * が1つしかついていないことに注目。これらの関数の引数には、文字列へのポインタが要求されるからだ。2つつけると文字列の最初の文字の値になってしまう。

takatoh@nightschool $ ./sample_6_6
Input your name: Andy
Hello, Andy!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください