认识函数指针(指针函数和函数指针对比)

深碍√TFBOYSˉ_ 2024-02-21 09:14 180阅读 0赞

































             类型

比较项

指针函数

函数指针

概述

指针函数是一个函数,只不过指针函数返回的类型是某一类型的指针。

函数指针是指向函数的指针变量。所以函数指针其实是指针变量,只不过该指针变量指向函数。

格式

类型名 函数名(函数参数列表)

: int add(int, int);

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

: int (p)(int, int);

用途

返回某一类型的指针变量, 解决返回多个值的问题

a.调用函数

b.做函数的参数

使用1

  1. // 指针函数,返回int 指针变量
    #include <stdio.h>
    int
    add(int a, int b)
    {
    int p;
    int c = a + b;
    p = &c;
    return p;
    }

    int main()
    {
    int
    p;
    p = add(1, 4);
    printf(“%d\n”, p);
    getchar();
    return 0;
    }

  1. // 函数指针,调用函数
    #include <stdio.h>
    int fun1(int a, int b)
    {
    return a + b;
    }




    int main()
    {
    int(p)(int, int); // 定义一个函数指针
    p = fun1; // 把函数fun1赋给指针变量p, 使p指向fun1函数
    printf(“%d\n”, p(1, 5)); //通过函数指针调用fun1函数
    getchar();
    return 0;
    }

使用2

  1. // 指针函数,返回2个值
    #include <stdio.h>
    void compare(int a, int b, int add_great, int add_small)
    {
    if (a > b) {
    // 变量a存储在指针变量add_great所指向的地址中
    // 变量b存储在指针变量
    add_small所指向的地址中
    add_great = a;
  2. add_small = b;
    }
    else {
    add_great = b;
  3. add_small = a;
    }
    }
    int main()
    {
    int great, small, x, y;
    printf(“输入两个数字: \n”);
    scanf(“%d%d”, &x, &y);
    // 最后两个参数是通过给出内存位置的地址来传递的。
    compare(x, y, &great, &small);
    printf(“\n最大值为:%d,最小值为:%d”, great, small);
    return 0;
    }

  1. // 函数指针,做函数的参数
    #include <stdio.h>
    int fun2(int a, int b)
    {
    return a + b;
    }
    int fun3(int a, int b, int(*f)(int, int))
    {
    return f(a, b);
    }
    int main()
    {
    printf(“%d\n”, fun3(1, 5, fun2));
    getchar();
    return 0;
    }

函数指针的好处:

1)把指针函数当作形参传递给某些具有一定通用功能的模块。并封装成接口来提高代码的灵活性和后期维护的便捷性。设计好了一个函数框架,但是设计初期并不知道自己的函数会被如何使用。比如C的”stdlib “中声明的qsort函数,用来对数值进行排序。显然,顺序还是降序,元素谁大谁小这些问题,库程序员在编写qsort的时候不可能决定。这些问题是要在用户调用这个函数的时候才能够决定。那边qsort如何保证通用性和灵活性呢?采用的办法是让函数的使用者来制定排序规则。于是调用者应该自己设计comparator函数,传给qsort函数。这就在程序设计初期保证了灵活性。尽管使用函数指针使得程序有些难懂,但是这样的牺牲还是值得的。

2)可以具有封装特性,如结构体中可以包含函数指针,不同的结构体可以包含有相同名字的函数指针,这样不会导致冲突。

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

发表评论

表情:
评论列表 (有 0 条评论,180人围观)

还没有评论,来说两句吧...

相关阅读

    相关 函数指针指针函数

    指针函数 定义 指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。 声明格式为:\类型标识符 函数名(参数表) 看看下面

    相关 C++函数指针指针函数

    指针函数:一个返回指针的函数,本质是一个函数,返回的变量为指针类型。这里不做赘述。主要讲函数指针的概念与运用。 函数指针 定义 本质为一个指针变量,这个指针指向一

    相关 指针函数函数指针

    指针函数和函数指针的区别在于: 函数指针是指针指向函数地址,指针函数是返回值类型为指针。 下面看下函数指针的例子: include<stdio.h>

    相关 函数指针&指针函数

    一、 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1、指针函数是指带指针的函数,即本质

    相关 函数指针指针函数

      函数指针和指针函数经常是很多初学者感到疑惑的地方,其实这两个是完全不同的概念。 指针函数   指针函数就是返回值为指针类型的函数。 函数指针   指针函数的概念其实