c語(yǔ)言函數(shù)指針的用法是什么

小億
86
2024-01-23 09:53:03

C語(yǔ)言函數(shù)指針是指向函數(shù)的指針變量,它可以指向一個(gè)函數(shù)的首地址。函數(shù)指針的用法主要有兩種:

  1. 函數(shù)指針作為參數(shù):函數(shù)指針可以函數(shù)的參數(shù),用來(lái)在函數(shù)調(diào)用時(shí)傳遞函數(shù)的地址,從而達(dá)到在函數(shù)中調(diào)用其他函數(shù)的目的。這樣可以實(shí)現(xiàn)一些高級(jí)的函數(shù)功能,比如回調(diào)函數(shù)。例如:
#include <stdio.h>

void print(int num) {
    printf("%d\n", num);
}

void iterate(int start, int end, void(*func)(int)) {
    for(int i = start; i <= end; i++) {
        func(i);
    }
}

int main() {
    iterate(1, 5, print);
    
    return 0;
}
  1. 函數(shù)指針作為返回值:函數(shù)指針也可以函數(shù)的返回值,用來(lái)返回一個(gè)指向函數(shù)的指針。這樣可以實(shí)現(xiàn)根據(jù)不同的條件返回不同的函數(shù)地址。例如:
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int multiply(int a, int b) {
    return a * b;
}

int divide(int a, int b) {
    return a / b;
}

int (*getOperation(char op))(int, int) {
    switch(op) {
        case '+':
            return add;
        case '-':
            return subtract;
        case '*':
            return multiply;
        case '/':
            return divide;
        default:
            return NULL;
    }
}

int main() {
    int a = 10, b = 5;
    char op = '+';
    
    int (*operation)(int, int) = getOperation(op);
    
    if(operation != NULL) {
        int result = operation(a, b);
        printf("%d\n", result);
    } else {
        printf("Invalid operator\n");
    }
    
    return 0;
}

這樣,根據(jù)不同的操作符,可以返回對(duì)應(yīng)的函數(shù)地址,從而實(shí)現(xiàn)不同的運(yùn)算。

0