なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

C言語でダブルポインタ

C言語のポインタを使ってみる

とは言ってもC++なのだが、
ポインタはメモリのある位置を指し示す事ができる。
適当に文字列や配列を設定してその先頭要素を指定したら、ポインタは配列の中身を動き回れる。

#include <cstdio>
#include <cstdlib>

int main()
{
    const char* arr[] = {"tokyo", "osaka", "nagoya"};

    puts("---[ test 1]---");
    for (const char* s : arr)
    {
        puts(s);
    }

    puts("---[ test 2]---");

    // 文字列配列の先頭要素をポインタとして取得する
    const char** p = &arr[0];

    for ( size_t i = 0; i < sizeof(arr)/sizeof(const char*); i++)
    {
        puts(p[0]);
        p++;
    }

    // 'p'はconst付きだが新しい配列を設定してもまた使える
    const char* arr2[] = {"yakushima", "tanegashima", "tsushima"};
    // なんか先頭要素を指定しなくても勝手にコピーしてくれるっぽい
    p = arr2;

    puts("---[ test 3]---");
    for ( size_t i = 0; i < sizeof(arr2)/sizeof(const char*); i++)
    {
        puts(p[0]);
        p++;
    }
}