函数指针

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

函数指针是一种存储函数内存地址的方式,就像变量存储值的内存地址一样。当通过指针调用函数时,这被称为函数指针。

在本实验中,我们将编写一个 C 程序来演示如何使用函数指针。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/PointersandMemoryGroup(["`Pointers and Memory`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c(("`C`")) -.-> c/FileHandlingGroup(["`File Handling`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/PointersandMemoryGroup -.-> c/pointers("`Pointers`") c/PointersandMemoryGroup -.-> c/memory_address("`Memory Address`") c/FunctionsGroup -.-> c/function_declaration("`Function Declaration`") c/FunctionsGroup -.-> c/function_parameters("`Function Parameters`") c/FileHandlingGroup -.-> c/write_to_files("`Write To Files`") c/FileHandlingGroup -.-> c/create_files("`Create Files`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/pointers -.-> lab-123303{{"`函数指针`"}} c/memory_address -.-> lab-123303{{"`函数指针`"}} c/function_declaration -.-> lab-123303{{"`函数指针`"}} c/function_parameters -.-> lab-123303{{"`函数指针`"}} c/write_to_files -.-> lab-123303{{"`函数指针`"}} c/create_files -.-> lab-123303{{"`函数指针`"}} c/output -.-> lab-123303{{"`函数指针`"}} end

声明并定义需要指向的函数

在这一步中,我们将声明并定义一个函数,该函数接受两个整数参数且不返回任何值。

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

声明函数指针

在这一步中,我们将声明一个指向步骤 1 中创建的函数的指针。声明函数指针的语法与声明变量指针的语法类似,但需要指定被指向函数的参数类型和返回类型。

// function pointer
void (*fptr)(int , int);

将函数的地址存储到指针中

在这一步中,我们将把步骤 1 中创建的函数的地址存储到步骤 2 中创建的指针中。

// assign address to function pointer
fptr = func;

使用指针调用函数

在这一步中,我们将使用步骤 2 中创建的函数指针来调用步骤 1 中创建的函数。

// function calling
func(2,3);
fptr(2,3);  // calling a function referring to pointer to a function

编写完整代码

打开 ~/project/ 目录下的 main.c 文件。

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

int main()
{
    printf("\n\n\t\tLabEx - Best place to learn\n\n\n");

    // function pointer
    void (*fptr)(int , int);

    // assign address to function pointer
    fptr = func;

    // function calling
    func(2,3);
    fptr(2,3);  // calling a function referring to pointer to a function

    printf("\n\n\t\t\tCoding is Fun !\n\n\n");
    return 0;
}

编译并运行代码

要编译代码,请打开终端并输入以下命令:

gcc main.c -o main

要运行程序,请输入以下命令:

./main

总结

在本实验中,我们学习了如何在 C 程序中使用函数指针。我们了解了如何声明和定义需要指向的函数,如何声明函数指针,如何将函数的地址存储到指针中,以及如何使用指针调用函数。使用函数指针可以使复杂的程序更易于编写和理解。

您可能感兴趣的其他 C 教程