当前位置:网站首页>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);
边栏推荐
猜你喜欢

腾讯云 TStor 统一存储通过信通院首批文件存储基础能力评测

PyQt5_ Qscrollarea content is saved as a picture

The most complete analysis of Flink frame window function

Tip: SQL Server blocked the state 'openrowset/opendatasource' of component 'ad hoc distributed queries'

< schéma de développement de la machine d'exercice oral > machine d'exercice oral / trésor d'exercice oral / trésor de mathématiques pour enfants / lecteur LCD de calculatrice pour enfants IC - vk1621

MQ教程 | Exchange(交换机)

C crystal report printing

Teamtalk source code analysis win client
![[development environment] 010 editor tool (tool download | binary file analysis template template installation | shortcut key viewing and setting)](/img/de/7d70f513577e93f1bde1969935a29e.jpg)
[development environment] 010 editor tool (tool download | binary file analysis template template installation | shortcut key viewing and setting)

Daily learning 2
随机推荐
PyQt5_QScrollArea内容保存成图片
测试框架TestNG的使用(二):testNG xml的使用
Who is better, Qianyuan projection Xiaoming Q1 pro or Jimi new play? Which configuration is higher than haqu K1?
Yolov3 & yolov5 output result description
TeamTalk源码分析之win-client
QT new project_ MyNotepad++
Penetrate the remote connection database through the Intranet
<口算練習機 方案開發原理圖>口算練習機/口算寶/兒童數學寶/兒童計算器 LCD液晶顯示驅動IC-VK1621B,提供技術支持
Qt新建项目
你知道Oracle的数据文件大小有上限么?
SystemServer进程
一般来讲,如果频繁出现inconsistent tab and space的报错
Go operation redis
Launcher startup process
PHP linked list creation and traversal
c# 水晶报表打印
Fabric.js 动态设置字号大小
NLA自然语言分析实现数据分析零门槛
Solving the longest subsequence with linear DP -- three questions
Development and design of animation surrounding mall sales website based on php+mysql