美文网首页
C 函数指针

C 函数指针

作者: 付凯强 | 来源:发表于2022-02-28 13:18 被阅读0次

    定义

    在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。函数指针可以像一般函数一样,用于调用函数、传递参数。

    声明

    int(*p)(int, int); // 声明一个指向同样参数、返回值的函数指针类型
    

    这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个“”,即(p);其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)。

    函数返回值类型 (* 指针变量名) (函数参数列表);
    

    函数指针的定义就是将“函数声明”中的“函数名”改成“(指针变量名)”。但是这里需要注意的是:“(指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。

    指向变量的指针变量还是指向函数的指针变量

    首先看变量名前面有没有“*”,如果有“*”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。

    注意:

    指向函数的指针变量没有 ++ 和 -- 运算。

    示例

    # include <stdio.h>
    int Max(int, int);  //函数声明
    int main(void)
    {
        int(*p)(int, int);  //定义一个函数指针
        int a, b, c;
        p = Max;  //把函数Max赋给指针变量p, 使p指向Max函数
        printf("please enter a and b:");
        scanf("%d%d", &a, &b);
        c = (*p)(a, b);  //通过函数指针调用Max函数
        printf("a = %d\nb = %d\nmax = %d\n", a, b, c);
        return 0;
    }
    int Max(int x, int y)  //定义Max函数
    {
        int z;
        if (x > y)
        {
            z = x;
        }
        else
        {
            z = y;
        }
        return z;
    }
    
    
    please enter a and b:50 60
    a = 50
    b = 60
    max = 60
    

    以上内容,如果对你有帮助,欢迎关注和点赞~

    相关文章

      网友评论

          本文标题:C 函数指针

          本文链接:https://www.haomeiwen.com/subject/yiiykrtx.html