関数のポインタを返す関数へのポインタを返す関数を作ってみた
コードはこれ
#include<stdio.h>
void a(void){
printf("a\n");
}void b(void){
printf("b\n");
}void c(void){
printf("c\n");
}void d(void){
printf("d\n");
}void (*func(int num))(){
switch(num){
case 'a':
return a;
case 'b':
return b;
case 'c':
return c;
default :
return d;
}
return d;
}void (*(*func2(void))(int))(){
return func;
}int main(void){
func2()('b')();
}
「void (*func(int num))( )」は次のように読む。
「funcは引数がint型でポインタを返す関数」→「そのポインタ型はvoid( )である」
つまり、「funcは引数がint型でvoid( )型のポインタを返す関数」
「void (*(*func2(void))(int))( )」も似たような感じ。
「func2は引数がvoid型でポインタを返す関数」→「返すポインタの型はvoid(*(int))()」