#include <stdio.h> int main(void){ int n = 6; int square(int num); int (*fptr)(int); //聲明函數指針 fptr = square; //初始化函數指針 printf("%d square is %d.\n", n, fptr(n)); return (0); } int square(int num){ return (num * num); }
#include <stdio.h> double square(double x); // 函數原型 double (*ptr)(double x); // 聲明函數指針 int main(void){ ptr = square; // 讓指針指向square() //用兩種方式調用square() printf("%f %f\n", square(6.6), ptr(6.6)); return 0; } double square(double x){ return x * x; }
用函數指針根據不一樣使用狀況調用不一樣函數:函數
#include <stdio.h> #include <stdlib.h> void func1(int x); void one(void); void two(void); void other(void); int main(void){ int nbr; for(;;){ puts("\nEnter an integer between 1 and 10, 0 to exit: "); scanf("%d", &nbr); if(nbr == 0){ exit(0); } func1(nbr); } return 0; } void func1(int val){ void (*ptr)(void); if (val == 1) ptr = one; else if(val == 2) ptr = two; else ptr = other; ptr(); } void one(void){ puts("You entered 1."); } void two(void){ puts("You entered 2."); } void other(void){ puts("You entered something other than 1 or 2."); }
#include <stdio.h> //函數func1()接受一個函數指針參數,該指針指向的函數不接受任何參數,也沒有返回值 void func1(void (*p)(void)); void one(void); void two(void); void other(void); int main(void){ void (*ptr)(void); // 函數指針 int nbr; for(;;){ puts("\nEnter an integer between 1 and 10, 0 to exit: "); scanf("%d", &nbr); if(nbr == 0){ break; } else if(nbr == 1){ ptr = one; } else if(nbr == 2){ ptr = two; } else { ptr = other; } func1(ptr); } return 0; } void func1(void (*p)(void)){ p(); } void one(void){ puts("You enter 1."); } void two(void){ puts("You enter 2."); } void other(void){ puts("You enter something other than 1 or 2."); }