#include <unistd.h> typedef int (FUN) (void); typedef FUN_PTR (FUN*) ; int print1(void) { printf("1111111\n"); sleep(1); } int print2(void) { printf("2222222\n"); sleep(1); } int print3(void) { printf("333333\n"); sleep(1); } int print4(void) { printf("444444\n"); sleep(1); } int print5(void) { printf("555555\n"); 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 */
时间: 2024-11-06 12:49:22