【C语言】指针函数与函数指针

首先,有一个小问题:

int *ptr(int)
int (*ptr)(int)

如果你了解这两种用法的含义,并且能够熟练运用这两种指针用法,那么这篇文章对你来说并没有多少参考价值。

一、指针函数:
指针函数的基本形式是

类型说明符 * 函数名(参数)
如:
int *ptr(int)
int *Max(int a, int b);

指针函数较为更好理解,其实就是一个返回值为地址的函数而已。由于返回值为地址,所以类型说明符一把都是int。而且,调用指针函数是,接收返回值的必须是同类型的指针变量。
看看这一段代码,应该可以加深理解:

#include <stdio.h>

int *max(int *num1, int *num2)
{
    return (*num1 > *num2 ? num1 : num2);
}

int main(int argc, char const* argv[])
{
    int a = 100;
    int b = 200;
    printf("a = %p\n", &a);
    printf("b = %p\n", &b);

    int *p = max(&a,&b);
    printf("p = %p\n", p);
    printf("max = %d\n", *p);
    return 0;
}
a = 0x7ffefbf931f4
b = 0x7ffefbf931f0
p = 0x7ffefbf931f0
max = 200

上面这个程序中,指针函数的返回值是最大数的地址,这个返回值在程序中是被指针变量p接收。
在编程过程中,当遇到需要地址的情况,可以考虑使用指针函数。

二、函数指针:
函数指针相比指针函数,更加灵活,基本形式是:


   类型说明符 (*变量名)(参数)
   如:
   int (*ptr)(int)
   void (*ptr)();

指针函数和函数指针,看似只有一个括号的差别,然而实则差别很大。函数指针首先它是个指针,而指针函数本质上是个函数。
指针变量,通常使用中,我们常常用来指向数组,字符串等,但指针同时也可以指向函数。在程序编译过程中,每个函数会的得到一个入口地址,指向这个函数地址的指针,就被称为函数指针。

#include <stdio.h>

void (*ptr_1)();
int (*ptr_2)(int,int);

void print_1()
{
    printf("1111111\n");
}

void print_2()
{
    printf("2222222\n");
}

int sum(int num1,int num2)
{
    return num1 + num2;
}

int main(int argc, char const* argv[])
{
    int a = 100;
    int b = 200;
    int result = 0;

    ptr_1 = print_1;
    (*ptr_1)();

    ptr_1 = print_2;
    (*ptr_1)();

    ptr_2 = sum;
    result = (*ptr_2)(a,b);
    printf("a + b = %d\n", result);
    return 0;
}
1111111
2222222
a + b = 300

另外,函数指针返回值,也可以是指针。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值