当前位置:网站首页>Advanced C language -- function pointer
Advanced C language -- function pointer
2022-07-07 16:35:00 【chencli】
Let's look at a code first :
#include<stdio.h>
void test()
{
printf("haha\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
The output is two addresses , The name of the function is the address of the function
Save the address of the function :
#include<stdio.h>
void test()
{
printf("haha\n");
}
int main()
{
// A function pointer
int (*pf)(const char*) = test;
(*pf)("abc");
pf("abc");
test("abc");
return 0;
}
Function pointers are also pointers , Is a pointer to a function
int (*pf)(const char*) = test
pf The first and * combination , Is a pointer , Point to test function , No parameter , The return value type is void
《C Pitfalls and pitfalls 》 A piece of code :
( *(void (*)())0 )();
void(*)() It's a function pointer type
( void (*)() )0 Is a cast , The result is the address of the function ,0 Store a function in the address , No parameter , No return value
The above code is generally a function call , It's called 0 As a function at the address , First turn on the 0 Cast to no parameter , The return type is void The address of the function , The second is to call 0 This function at the address
Look at this code again :
void (*signal(int , void(*)(int)))(int);
Code can be simplified :
hold void(*)(int) Rename it to pfun_t
typedef void(*pfun_t)(int);
pfun_t signal(int, pfun_t);
signal Combine with the following parentheses , Is the function name
( int , void(*)(int) ) Are two parameter types
The above code is a function declaration ,signal The type of the first argument to the function is int, The second parameter type is the function pointer , The pointer points to a parameter of type int, Function with null return value ,signal The return type of a function is also a pointer function , The function pointer also points to a parameter of type int, Function with null return value
Use function pointers to simplify code :
When there are more identical codes in functions with similar functions , Function pointers can be used to simplify code
void calc( int(*pf) (int, int) )
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("*****************\n");
printf("***1.sum 2.sub***\n");
printf("***3.mul 4.div***\n");
printf("*****0. sign out *****\n");
printf("*********\n");
}
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
// Calculation
void calc(int(*pf)(int, int))
{
int x = 0;
int y = 0;
int ret = 0;
printf(" Enter two operands :");
scanf("%d%d", &x, &y);
ret = pf(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf(" Please select ");
scanf("%d", &input);
switch(input)
{
case 1:
calc(add);
break;
case 2:
calc(sub);
break;
case 3:
calc(mul);
break;
case 4:
calc(div);
break;
case 0:
printf(" Exit calculator !\n");
break;
default:
printf(" Wrong choice !\n");
break;
}
} while (input);
return 0;
}
The above code uses the callback function , Callback function It's a pass through A function pointer Called function . If you put Pointer to function ( Address ) Pass as argument to another function , When this pointer is used to call the function it points to , Let's just say this is a callback function . The callback function is not called directly by the function's implementer , It's called by another party when a particular event or condition occurs , Used to respond to the event or condition .
边栏推荐
- torch. Numel action
- Shandong old age Expo, 2022 China smart elderly care exhibition, smart elderly care and aging technology exhibition
- The difference and working principle between compiler and interpreter
- 华东师大团队提出,具有DNA调控电路的卷积神经网络的系统分子实现
- Good news! Kelan sundb database and Hongshu technology privacy data protection management software complete compatibility adaptation
- Xcode Revoke certificate
- JS 模块化
- Logback日志框架第三方jar包 免费获取
- pycharm 终端部启用虚拟环境
- markdown公式编辑教程
猜你喜欢
Good news! Kelan sundb database and Hongshu technology privacy data protection management software complete compatibility adaptation
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
记一次项目的迁移过程
HAVE FUN | “飞船计划”活动最新进展
Three. JS series (2): API structure diagram-2
Step by step monitoring platform ZABBIX
1亿单身男女“在线相亲”,撑起130亿IPO
记录Servlet学习时的一次乱码
Personal notes of graphics (4)
PyTorch 中的乘法:mul()、multiply()、matmul()、mm()、mv()、dot()
随机推荐
【DesignMode】模板方法模式(Template method pattern)
模仿企业微信会议室选择
Common training data set formats for target tracking
95.(cesium篇)cesium动态单体化-3D建筑物(楼栋)
laravel构造函数和中间件执行顺序问题
Leetcode-136-只出现一次的数(用异或来解答)
The difference and working principle between compiler and interpreter
01tire+链式前向星+dfs+贪心练习题.1
What are compiled languages and interpreted languages?
作为Android开发程序员,android高级面试
Asyncio concept and usage
logback. XML configure logs of different levels and set color output
Laravel changed the session from file saving to database saving
Shandong old age Expo, 2022 China smart elderly care exhibition, smart elderly care and aging technology exhibition
Plate - forme de surveillance par étapes zabbix
47_Opencv中的轮廓查找 cv::findContours()
Lecturer solicitation order | Apache seatunnel (cultivating) meetup sharing guests are in hot Recruitment!
Detailed explanation of several ideas for implementing timed tasks in PHP
Performance measure of classification model
深度监听 数组深度监听 watch