当前位置:网站首页>Function pointer and pointer function in C language
Function pointer and pointer function in C language
2022-07-07 04:55:00 【Xiaohao programming】
Array pointer
#include <stdio.h>
int getTheData(int (*p)[4],int hang,int lie)//(*p)[4] It's an array pointer
{
int data;
data = *(*(p+hang)+lie);// Find the value in the corresponding array
return data;
//return p[hang][lie];// Empathy Find the value in the corresponding array
}
void tipsInputHangLie(int *pm, int *pn)// The variable type in the formal parameter should be the same as that in the argument , All are int
{
printf(" Enter row and column values :\n");
scanf("%d%d",pm,pn);// The pointer is the address , Operate on the corresponding address
puts("done!");
}
//arr,arr[0]
int main()
{
int arr[3][4] = {
{
11,22,33,44},{
12,13,15,16},{
22,66,77,88}};//arr+
int ihang,ilie;
int data;
//1. Prompt the user to enter row and column values
tipsInputHangLie(&ihang,&ilie);// Operate on the address , So the operation in the function can change ihang and ilie Value
//2. Find the number corresponding to the row and column value
data = getTheData(arr,ihang,ilie);//arr Is the address of the array , That's the pointer
//3. Print out
printf("%d That's ok %d Is the value of the column %d\n",ihang,ilie,data);
}
Output content 
A function pointer
The underlying logic of returning a function is the function pointer
#include <stdio.h>
#include <stdlib.h>
int getMax(int data1, int data2)
{
return data1>data2 ? data1:data2;
}
int getMin(int data1, int data2)
{
return data1<data2 ? data1:data2;
}
int getSum(int data1, int data2)
{
return data1+data2;
}
int dataHandler(int data1, int data2, int (*pfunc)(int, int ))// The third parameter is the function pointer , There are requirements for types in function pointers , The formal parameter name can be omitted
{
int ret;
ret = (*pfunc)(data1,data2);// Call function , Get the return value
return ret;
}
int main()
{
int a = 10;
int b = 20;
int cmd;
int ret;
int (*pfunc)(int , int );
printf(" Please enter 1( Take a big value ),2( Take a small value ), perhaps 3( Sum up )\n");
scanf("%d",&cmd);
switch(cmd){
case 1:
pfunc = getMax;// The address has been changed , It changes the corresponding value
break;
case 2:
pfunc = getMin;
break;
case 3:
pfunc = getSum;
break;
default:
printf(" Input error !@ Input 1( Take a big value ),2( Take a small value ), perhaps 3( Sum up )\n");
exit(-1);// Abnormal exit
break;
}
ret = dataHandler(a,b,pfunc);//pfunc Get the corresponding function name , The third argument pfunc Is the address of the function pointer
printf("ret = %d\n",ret);
return 0;
}
Output content 
Function pointer array
#include <stdio.h>
#include <stdlib.h>
int getMax(int data1, int data2)
{
return data1>data2 ? data1:data2;
}
int getMin(int data1, int data2)
{
return data1<data2 ? data1:data2;
}
int getSum(int data1, int data2)
{
return data1+data2;
}
int main()
{
int a = 10;
int b = 20;
int ret;
int (*pfunc[3])(int , int )={
getMin,
getMax,
getSum};// Function pointer array ! initialization , Put the values in the array ( This value is an address , That's the pointer , This pointer is a function pointer , Put the three function addresses in the array )
for(int i=0;i<3;i++){
ret = (*pfunc[i])(a,b);// Traverse the three function pointers in the array , Get the return value
printf("ret = %d\n",ret);
}
return 0;
}
Output content 
A function pointer
#include <stdio.h>
int* getPosPerson(int pos, int (*pstu)[4])// A function pointer , Functions that return pointers
{
int *p;
p = (int *)(pstu+pos);// Two dimensional array address + The number entered is the corresponding array value , And then assign it to P
return p;
}
int main()
{
int scores[3][4]={
{
55,66,77,88},// Student 1
{
66,55,99,100},// Student 2
{
11,22,33,59},// Student 3
};
int *ppos;
int pos;
printf(" Please enter the number of students you need to see :0,1,2\n");
scanf("%d",&pos);
ppos = getPosPerson(pos, scores);// Get the address of the corresponding array
for(int i=0;i<4;i++){
// Traverse the values in the small array and output
printf("%d ",*ppos++);//++ Represents an offset int Integer bytes
}
return 0;
}
Output content 
The secondary pointer
#include <stdio.h>
void getPosPerson(int pos, int (*pstu)[4],int **ppos)// A function pointer , Functions that return pointers
{
*ppos = (int *)(pstu+pos);// The purpose of using secondary pointer is to directly modify MAIN Function ppos Value
}
int main()
{
int scores[3][4]={
{
55,66,77,88},
{
66,55,99,100},
{
11,22,33,59},
};
int *ppos;
int pos;
printf(" Please enter the number of students you need to see :0,1,2\n");
scanf("%d",&pos);
getPosPerson(pos, scores,&ppos);
for(int i=0;i<4;i++){
printf("%d ",*ppos++);
}
return 0;
}
Output content 
边栏推荐
- 关于01背包个人的一些理解
- Two divs are on the same line, and the two divs do not wrap "recommended collection"
- 日常工作中程序员最讨厌哪些工作事项?
- Advertising attribution: how to measure the value of buying volume?
- sscanf,sscanf_s及其相关使用方法「建议收藏」
- Organize five stages of actual attack and defense drill
- 【愚公系列】2022年7月 Go教学课程 005-变量
- Thesis landing strategy | how to get started quickly in academic thesis writing
- How to open win11 remote desktop connection? Five methods of win11 Remote Desktop Connection
- 【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
猜你喜欢

Programmers go to work fishing, so play high-end!

窗口可不是什么便宜的东西

How to package the parsed Excel data into objects and write this object set into the database?

Meow, come, come: do you really know if, if else

Flex layout and usage

【736. Lisp 语法解析】

九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」

Introduction to the PureMVC series

Analyse approfondie de kubebuilder

JS variable plus
随机推荐
【736. Lisp 语法解析】
【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
Chapter 9 Yunji datacanvas company has been ranked top 3 in China's machine learning platform market
Jetson nano配置pytorch深度学习环境//待完善
Vscode 如何使用内置浏览器?
日常工作中程序员最讨厌哪些工作事项?
ServiceMesh主要解决的三大痛点
树与图的深度优先遍历模版原理
Basic idea of counting and sorting
STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
File upload vulnerability summary
Win11 control panel shortcut key win11 multiple methods to open the control panel
Meaning of 'n:m' and '1:n' in database design
Deeply cultivate the developer ecosystem, accelerate the innovation and development of AI industry, and Intel brings many partners together
Case reward: Intel brings many partners to promote the innovation and development of multi domain AI industry
System framework of PureMVC
Time complexity & space complexity
深入解析Kubebuilder
AI表现越差,获得奖金越高?纽约大学博士拿出百万重金,悬赏让大模型表现差劲的任务