• 指针函数与函数指针的区别


    1、指针函数:是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针

    类型标识符  *函数名(参数表)

    int *fun(x,y);

    首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同一类型的指针变量来接收。也就是说指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。

    (1)、定义指针函数的一般形式如下:

    类型名  *函数名(参数);

    例如:

    int *fun(int a);
    int *p;
    p =fun(a);

    2、函数指针:函数指针是指向函数的指针变量,即本质是一个指针变量。

    (1)、什么是函数指针

    如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配了一段存储空间,这段存储空间的起始地址(又称为入口地址)称为这个函数的指针。

    可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:

    int (*p) (int ,int );//定义p是一个指向函数的指针变
    //量,它可以指向函数的类型为整型且有两个整型参数
    //的函数。p的类型是int (*)(int ,int )表示。

    (2)、用函数的指针变量调用函数

    如果想调用一个函数,除了可以通过函数名调用以外,还可以通过指向函数的指针变量来调用该函数。

    例子1:用函数求整数a和b中的大者。

    (1)、通过函数名调用函数

    /*************************
    (1)、通过函数名调用函数
    *************************/
    #include <stdio.h>
    
    int main()
    {
        int max(int, int);//函数的声明
        int a, b, c;
        printf("Pleade input 2 integer numbers:");
        scanf_s("%d,%d", &a, &b);
        c = max(a, b);//通过函数名调用max函数
        printf("a=%d
    b=%d
    max=%d
    ", a, b, c);
        getchar();
        return 0;
    }
    int max(int x,int y)//定义max函数
    {
        int z;
        if (x > y)
            z = x;
        else
            z = y;
    
        return (z);
    }

    (2)、通过指针变量访问它所指向的函数

    /*************************
    (2)、通过指针变量访问它所指向的函数
    *************************/
    #include <stdio.h>
    
    int main()
    {
        int max(int, int);//函数的声明
        int (*p)(int,int);//定义指向函数的指针变量p
        int a, b, c;
        p = max;//使p指向max函数
        printf("Pleade input 2 integer numbers:");
        scanf_s("%d,%d", &a, &b);
        c =(*p)(a, b); //通过指针变量调用max函数
        printf("a=%d
    b=%d
    max=%d
    ", a, b, c);
        system("pause");
        return 0;
    }
    int max(int x,int y)//定义max函数
    {
        int z;
        if (x > y)
            z = x;
        else
            z = y;
    
        return (z);
    }

    上面的两个程序的运行结果一样。

    注意:

    对于“int (*p)(int ,int);”,*p两侧的括号不能省略,表示p先与*结合,是指针变量,然后再与后面的()结合,()表示的是函数,即该指针变量不是指向一般的变量,而是指向函数。

    如果写成“int * p(int ,int );”,由于()优先级高于*,它相当于“int *(p(int,int));”就成了声明一个p函数了(这个函数的返回值是指向整型变量的指针)。

    “p=max;”的作用是将函数max的入口地址赋给指针变量p。和数组名代表数组首元素地址类似,函数名代表函数的入口地址。这样p就是指向函数max的指针变量,此时p和max都指向函数的开头。调用*p就是调用max函数。

    (3)、怎样定义和使用指向函数的指针变量

    定义指向函数的指针变量的一般形式如下:

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

    注意:

    1、定义指向函数的指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向定义时指定的类型的函数。如:“int (*p) (int ,int );”表示指针变量p只能指向函数返回值为整型且有两个整型参数的函数。

    2、如果要用指针调用函数,必须先使指针变量指向该函数。如:p = max;

    3、在给函数指针变量赋值时,只需给出函数名而不必给出参数,如:

    p = max;//将函数的入口地址赋给p

    如果写成:

    p = max(a,b);

    就错了,因为p=max(a,b)是将调用max函数所得到的函数值赋给p,而不是将函数的入口地址赋给p。

    4、用函数指针变量调用函数时,只需将(*p)代替函数名即可(p为指针变量名,存放的是函数的入口地址),在(*p)之后的()中根据需要写上实参。例如:

    c =(*p) (a,b);

    5、对指向函数的指针变量不能进行算术运算,如:p+n、p++、p--等运算是没有意义的。

    6、用函数名调用函数,只能调用所指定的一个函数,而通过指针变量调用函数则比较灵活,可以根据不同的情况先后调用不同的函数。

  • 相关阅读:
    1.Hibernate配置
    CKEditor/FCKEditor的使用
    介绍一个好用的工具类库commons-beanutils
    SpringBean.xml配置
    MVC框架显示层——Velocity技术
    mysql CMD命令
    day 05
    day 04
    day03
    python day 02
  • 原文地址:https://www.cnblogs.com/dengxiangliu/p/6235482.html
Copyright © 2020-2023  润新知