FromNandの日記

自分的備忘録

関数のポインタを返す関数へのポインタを返す関数を作ってみた

コードはこれ

#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))()」