読者です 読者をやめる 読者になる 読者になる

Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

ポインタのポインタ(のポインタ)と私

今まで、ポインタのポインタは何の為に必要なのかよくわからなかったけど、理解しました。

ポインタのポインタを使うと、2次元配列を扱えるのね。で、ポインタを使うメリットは、

  • 行毎に異なった長さを持つ2次元配列を作れる
  • メモリの節約になる

て感じでしょうか。

「ポインタの」がつくと配列の次元数が一個上がると覚えとけばOKだろう。多分。

  • ポインタの1次元配列 → 2次元配列
  • ポインタの2次元配列 → 3次元配列
  • ポインタのポインタのポインタ → 3次元配列(ほんとか??)

しかし、先にあげたメリットよりも可読性が低くなるっていうデメリットの方がでかい気がするのは気のせいだろうか。

あ、でも、関数へのポインタを配列にして使うってのは便利そうだと思った。こんな感じの

void hoge1 () {
	printf("hoge1 was executed.");
}

void hoge2 () {
	printf("hoge2 was executed.");
}

void hoge3 () {
	printf("hoge3 was executed.");
}

void main () {
	int n;

	printf("Input number");
	scanf("%d",&n);

	switch(n) {
		case 1  : hoge1(); break;
		case 2  : hoge2(); break;
		case 3  : hoge3(); break;
		default : printf("No operation.");
	}
}

コードで、hoge1からhoge20までとかあるとかなりダサくなっちゃいますが、関数ポインタの配列を使えば、main()は

void main () {
	int n;
	void (*fp[])() = { hoge1, hoge2, hoge3 };

	printf("Input number");
	scanf("%d",&n);
	(*fp[n])();
}

とかなりエレガントな感じに。あーでもやっぱ見づらいかなあ。。。