指针函数和函数指针

C语言中的指针和函数是其核心特征之一。它们能够提供强大的灵活性和扩展性,对于C语言程序的开发非常重要。在C语言中,还有两个与指针和函数有关的概念需要进一步了解,即函数指针和指针函数。

1、函数指针

1.1

函数指针是指向函数的指针变量。它允许通过变量名引用函数,而不是通过函数名。在C语言中,函数名实际上是函数代码的内存地址。因此,函数指针存储着代码段中相应的地址。使用函数指针可以方便地在代码中传递和使用函数作为参数,也可以在程序运行时动态地指定需要调用的函数。

在C语言中,函数指针的声明方式比较特殊。例如,以下是一个简单的函数指针:

```

int (*funcPtr)(int, int);

```

上面的声明意味着“funcPtr”是一个指向函数的指针变量,该函数返回类型为int,并且接受两个整型参数。

为了调用该函数指针,需要将其指向需要调用的函数。例如,以下代码演示了如何将函数指针指向一个函数:

```

int add(int x, int y) {

return x+y;

}

int (*funcPtr)(int, int);

funcPtr = add;

``

通过将“add”函数的地址赋给函数指针“funcPtr”,现在可以通过“funcPtr”变量调用“add”函数了:

```

int result = (*funcPtr)(2, 3);

```

在这里,“result”变量等于5,即调用“add”函数传递整型参数2和3的结果。

=====================================================

1.2

定义

我们看个代码

int *func(int a,int b)

我们之前说过运算符的优先级,*的优先级低于(

由于“*”的优先级低于“()”的优先级,因而func首先和后面的“()”结合,也就意味着,func是一个函数。即:

int *(func)(int a,int b)

然后这个函数的返回值的类型是 int * 即:指向int类型的指针

然后我们这样修改上面的代码

int (*func)(int a,int b)

(*func)说明func是一个指针,然后后面跟着()说明这个指针指向一个函数,即函数指针。

所以

函数指针:首先是一个指针,这个指针指向一个函数

指针函数:首先是一个函数,这个函数的返回值一个指针

 
用typedef声明一个函数指针

我们声明一个函数指针,正常方法是

int (*pfunc)(int a,int b)

当我们命名很多个函数指针的时候,用上面的方法显得非常不方便,所以我们可以这样做

    typedef int (*PF) (int a,intb)
    PF pfunc;

例程:

    #include "stdio.h"
     
    typedef int(*PF)(int, int);
     
    int add(int a, int b)
    {
        return a + b;
    }
     
    int reduce(int a, int b)
    {
        return a - b;
    }
     
    int main()
    {
        PF pfunc = NULL;
        pfunc = add;
        printf("add:%d\n",pfunc(3, 4));
        pfunc = reduce;
        printf("reduce:%d\n", pfunc(3, 4));
        /*getchar是用VS编写方便查看输出*/
        getchar();
        return 0;
    }


 

2、指针函数

指针函数是返回指针的函数。它允许返回指向指针的指针,也可以返回指针数组。指针函数可以用于动态内存分配、数据结构遍历等场景。此外,它也可以浓缩代码思路,提高代码的可读性和可维护性。

以下是一个示例指针函数:

```

int* getArray() {

static int arr[3] = {1, 2, 3};

return arr;

}

```

该函数返回一个指向整型数组的指针。在程序中,指针函数可以像另一个指针变量一样使用,代码可以按以下方式访问函数返回的数组中的元素:

```

int* arrPtr = getArray();

for(int i=0; i<3; i++) {

printf("%d ", arrPtr[i]);

}

```

运行结果是:1 2 3

在本例中,指针函数实现了一个静态整型数组,然后返回一个指向该数组的指针。相应地,指针变量“arrPtr”指向该数组的地址。最后,使用“arrPtr”指针来访问数组中的元素。

小结

函数指针和指针函数是C语言中两个不同的核心概念。使用函数指针可以方便地传递和使用函数作为参数,而使用指针函数可以返回指向指针的指针或指向指针数组的指针。两者都是对C语言功能的补充,可以提高代码的易用性和灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学如逆水行舟,不进则退3038

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值