用函數指針調用函數

#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.");
}
相關文章
相關標籤/搜索