函数数组

#include <unistd.h>
typedef int (FUN) (void);
typedef FUN_PTR (FUN*) ;
int print1(void)
{
    printf("1111111
");
    sleep(1);
}

int print2(void)
{
    printf("2222222
");
    sleep(1);
}

int print3(void)
{
    printf("333333
");
    sleep(1);
}

int print4(void)
{
    printf("444444
");
    sleep(1);
}

int print5(void)
{
    printf("555555
");
    sleep(1);
}

FUN* functable[]={
    print1 ,
    print2,
    print3,
    print4,
    0
};

int main()
{
    FUN **fnc_ptr  ;
 
    int i ;    
    for(fnc_ptr = functable ; *fnc_ptr ; ++fnc_ptr){
        (*fnc_ptr)();
    }
    fnc_ptr = functable;
    for(i=0 ; i<5;i++){
        (*(fnc_ptr+i))();
    }
    fnc_ptr = functable;
    for(i=0 ; i<5;i++){//Segmentation fault
         (fnc_ptr[i])();
    }
}
/*
1111111
2222222
333333
444444
1111111
2222222
333333
444444
Segmentation fault
*/
改:
int main()
{
    FUN **fnc_ptr  ;
 
    int i ;    
    for(fnc_ptr = functable ; *fnc_ptr ; ++fnc_ptr){
        (*fnc_ptr)();
    }
    #if 1
    fnc_ptr = functable;
    for(i=0 ; i< 4;i++){
        (*(fnc_ptr+i))();
    }
    #endif
    
    #if 1 
    fnc_ptr = functable;
    for(i=0 ; i< 4;i++){
         (fnc_ptr[i])();
    }
    #endif

}
/*
1111111
2222222
333333
444444
1111111
2222222
333333
444444
1111111
2222222
333333
444444
*/
原文地址:https://www.cnblogs.com/mylinux/p/3981881.html