【C语言学习笔记】函数指针的定义和用法

函数指针的定义和用法

先回顾下数组的储存方式,当你在程序中定义了一个数组,那么系统就会自动根据你的数组类型和数组长度申请一块储存空间给你。而且数组名储存的地址刚好就是申请的这块储存空间的首地址,这也是为什么我们在输入字符串时不用&,因为下面的s数组名储存的就是首地址,不用再对它进行取地址符操作了。

char s[100];

scanf ( "%s", s );

那么我们再来理解一下函数,与数组类似的,函数名储存的也是首地址。

函数指针不同于指针的地方就是函数指针所储存的地址为函数,而普通指针的地址为变量地址。

函数指针定义方式:
int (*p)(int,int)
函数返回值类型 (*指针变量名)(函数参数列表)

函数定义方式:
int func(int, int)
函数返回值类型 函数名(函数参数列表)

普通指针定义方式:
int *p
指针类型 指针名

与普通指针的定义方式不同,函数指针的定义方式如上,其中需要特别注意的是(*p)的括号千万不能省略,因为这个和运算符的优先级有关系。如果省略了括号,那么定义的就是一个函数返回值类型为指针的函数了。

普通指针的应用
int a;
p = &a;

函数指针的应用
p = func;
//再次强调申明一下,因为函数名就代表了函数的首地址,所以不用像普通指针一样对变量用取地址符&

通过对比也可以知道函数指针的定义方式和函数的定义方式十分类似,区别就在于*

而函数指针的应用因为函数名默认储存首地址的特性也略有不同。

我们知道对于普通指针

*p = a

那么同样的,对于函数指针

(*p)(int, int) = func(int, int)

因此在一些特殊的场景,函数指针就能够发挥自己特点了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值