C语言声明函数指针

  • Post category:C

C语言中的函数指针是一种特殊的指针,它指向一个函数的入口地址。函数指针声明的语法如下:

return_type (*ptr)(parameters)

其中,return_type表示函数的返回值类型,ptr为函数指针变量名,parameters表示函数的参数列表。我们可以通过以下示例来了解函数指针的使用。

示例一:函数指针作为参数

#include <stdio.h>

void print_int(int a) {
    printf("%d\n", a);
}

void print_string(char* s) {
    printf("%s\n", s);
}

void execute(void (*func)(int), int arg) {
    func(arg);
}

int main() {
    // 通过函数指针调用函数
    void (*p1)(int) = print_int;
    p1(123);

    // 将函数指针作为参数传递给函数
    execute(p1, 456);

    // 另一个函数指针调用函数
    void (*p2)(char*) = print_string;
    p2("Hello, World!");

    return 0;
}

在上述示例中,我们定义了两个函数print_intprint_string,它们分别用于输出整数和字符串。然后我们又定义了另外一个函数execute,这个函数接受一个函数指针和一个整数作为参数,它会把这个整数传递给函数指针所指向的函数。在main函数中,我们分别声明了p1p2这两个函数指针,然后通过它们调用了print_intprint_string函数,并把它们作为参数传递给了execute函数,最后输出了相关结果。这个示例展示了函数指针可以作为参数使用的情况。

示例二:函数指针作为回调函数

#include <stdio.h>

void print(int* arr, int size, void (*callback)(int)) {
    for(int i = 0; i < size; i++) {
        callback(arr[i]);
    }
}

void print_int(int a) {
    printf("%d ", a);
}

void print_square(int a) {
    printf("%d ", a*a);
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};

    // 使用函数指针作为回调函数
    print(arr, 5, print_int);
    printf("\n");

    print(arr, 5, print_square);
    printf("\n");

    return 0;
}

在上述示例中,我们定义了两个函数print_intprint_square,它们分别用于输出一个整数和它的平方。然后我们又定义了一个print函数,这个函数接受一个整数数组、数组大小和一个函数指针作为参数。在函数内部,我们遍历数组,并把数组中的每一个元素传递给函数指针所指向的函数。在main函数中,我们声明了arr这个整数数组,然后分别使用print_intprint_square这两个函数作为回调函数,把数组中的元素输出出来,最后输出相关结果。这个示例展示了函数指针可以用于回调函数的情况。

综上所述,函数指针是一种非常灵活的机制,它可以用于函数的间接调用、函数指针作为参数和回调函数等,我们应该根据实际情况合理使用函数指针,提高程序的效率和可维护性。