ポインタの配列

配列の中にポインタを格納できる。
主な使用方法は「文字列の配列」。*1

#include <stdio.h>

int main (void) {

	char *seasons[] = {"spring", "summer", "fall", "winter"};
	int i,length;

        //配列の要素数を取得
	length = sizeof seasons / sizeof seasons[0];

	for (i = 0; i < length; i++) {

		printf("seasons[%d] = %s\n", i, seasons[i]);

	}

	return 0;


}

実行結果

seasons[0] = spring
seasons[1] = summer
seasons[2] = fall
seasons[3] = winter

ポインタの配列をポインタに代入する

#include <stdio.h>

int main (void) {

        char *seasons[] = {"spring", "summer", "fall", "winter"};
        char **p;

        p = seasons;

        printf("%s\n", p[2]); //fall
        printf("%s\n", *(p + 2)); //fall
        printf("%c\n", p[2][1]); //a
        printf("%c\n", *(*(p + 2) +1)); //a

        return 0;


}

*1:二次元配列でも文字列の配列を実現できるが、列数が固定されてしまうので、文字列の長さがまちまちの場合はメモリの無駄になりやすい。