当前位置:网站首页>3、函数指针和指针函数
3、函数指针和指针函数
2022-07-02 11:21:00 【Little BigUs】
函数指针和指针函数
函数指针
函数指针是一个指针,指向一个函数,这个被指向的函数的返回值和参数列表必须和 指针定义时的返回值和参数列表相同。
例如下面的代码:
#include<stdio.h>
void pp()
{
printf("this is function pp!\n");
}
void ppp()
{
printf("this is function ppp!\n");
}
int main(void)
{
void (*p)();
p = pp;
p();
p = ppp;
p();
return 0;
}
就定义了一个指向 返回值为void,参数列表为空的函数指针,并且定义了两个函数pp和ppp,然后分别将p指向这两个函数并且调用函数。这就是函数指针。*p周围的括号一定不能省略,否则会错。使用()之后p先与*结合,所以p是一个指针。
注意在上面赋值的时候是直接把函数名赋值给指针,我们都知道指针指向的是地址,而前面指向变量的指针需要在变量前面加一个&这个取地址的符号,而函数指针指向函数的时候不需要,这说明其实函数名就是一个地址,
printf("%p\n",pp);
printf("%p\n",&pp);
我们可以再试试打印上面的两个值,一个是打印pp的值,一个是打印pp的地址,我们可以发现这两个值都是一样的,也就是说无论是pp还是&pp都是代表地址,所以前面指针的赋值不仅可以是p = pp;也可以是p = &pp;当然我们一般都是使用p = pp;少一个符号岂不方便?
指针函数
而指针函数则是一个函数,这个函数的返回值是一个指针。
例如int* f(int a, int b);
就是一个指针函数的定义,这个函数的返回值必须是一个int型的指针。
()的优先级高于*,所以f先与()结合,f是一个函数。
函数指针数组
顾名思义,这是一个数组,数组中的每一个元素都是一个函数指针,而函数指针是一个指向函数的指针。数组中所有元素的类型必须相同,所以数组中所有的函数指针都必须指向同类型的函数。
int (*p[10])(int a, int b);
边栏推荐
- The evolution process of the correct implementation principle of redis distributed lock and the summary of redison's actual combat
- PyQt5_QScrollArea内容保存成图片
- Use of UIC in QT
- 默认插槽,具名插槽,作用域插槽
- QT how to set fixed size
- In 2021, the global styrene butadiene styrene (SBS) revenue was about $3722.7 million, and it is expected to reach $5679.6 million in 2028
- Word frequency statistics & sorting
- Codeforces Round #803 (Div. 2)(A~D)
- 2022 home projector preferred! Dangbei F5 brings the ultimate audio-visual experience with its powerful audio-visual effect
- 联合搜索:搜索中的所有需求
猜你喜欢
博睿数据一体化智能可观测平台入选中国信通院2022年“云原生产品名录”
Tip: SQL Server blocked the state 'openrowset/opendatasource' of component 'ad hoc distributed queries'
kaggle如何使用utility script
C crystal report printing
Default slot, named slot, scope slot
【虹科技术分享】如何测试 DNS 服务器:DNS 性能和响应时间测试
[development environment] Dell computer system reinstallation (download Dell OS recovery tool | use Dell OS recovery tool to make USB flash disk system | install system)
BeanUtils -- shallow copy -- example / principle
每日学习3
Teamtalk source code analysis win client
随机推荐
Method of creating linked server for cross server data access
C crystal report printing
Development and design of animation surrounding mall sales website based on php+mysql
PHP linked list creation and traversal
P1908 reverse sequence pair
快解析:轻松实现共享上网
Talk about idempotent design
默认插槽,具名插槽,作用域插槽
Golang 快速生成数据库表的 model 和 queryset
OpenHarmony笔记-----------(四)
Fabric.js 元素被选中时保持原有层级
卷积神经网络(入门)
<口算练习机 方案开发原理图>口算练习机/口算宝/儿童数学宝/儿童计算器 LCD液晶显示驱动IC-VK1621B,提供技术支持
万物生长大会在杭召开,当贝入选2022中国未来独角兽TOP100榜单
Teamtalk source code analysis win client
<口算練習機 方案開發原理圖>口算練習機/口算寶/兒童數學寶/兒童計算器 LCD液晶顯示驅動IC-VK1621B,提供技術支持
Packet capturing tool Fiddler learning
《可供方案开发》口算训练机/数学宝/儿童口算宝/智能数学宝 LCD液晶显示驱动IC-VK1622(LQFP64封装),原厂技术支持
docker mysql
Multi rotor aircraft control using PID and LQR controllers