C言語における関数ポインタの使い方は何ですか?

C言語の関数ポインタは、関数を指すポインタ変数であり、関数の先頭アドレスを指すことができます。関数ポインタの用途は主に2つあります。

  1. 関数ポインタをパラメータとして:関数ポインタは、関数のアドレスを関数呼び出し時に渡すために使用される、関数のパラメータとして機能します。これにより、他の関数を呼び出すことが可能になります。これにより、コールバック関数などの高度な機能を実現することができます。例:
#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. 関数ポインタを返り値として使用する:関数ポインタは、関数のアドレスを指すポインタを返すために使用されることができる。これにより、異なる条件に応じて異なる関数のアドレスを返すことができる。例:
#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;
}

したがって、異なるオペレータに基づいて、対応する関数アドレスを返して、異なる演算を実現することができます。

bannerAds