当前位置:网站首页>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 
边栏推荐
- JS variable case
- 全国气象数据/降雨量分布数据/太阳辐射数据/NPP净初级生产力数据/植被覆盖度数据
- How to package the parsed Excel data into objects and write this object set into the database?
- [practice leads to truth] is the introduction of import and require really the same as what is said on the Internet
- Leetcode notes
- Chapter 9 Yunji datacanvas company has been ranked top 3 in China's machine learning platform market
- What work items do programmers hate most in their daily work?
- JS also exports Excel
- DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
- Win11 control panel shortcut key win11 multiple methods to open the control panel
猜你喜欢

R语言主成分pca、因子分析、聚类对地区经济研究分析重庆市经济指标

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

Introduction to the PureMVC series

为什么很多人对技术债务产生误解

Flex layout and usage

Common Oracle SQL statements

How does vscade use the built-in browser?

A line of R code draws the population pyramid

装饰器基础学习02

AI landing new question type RPA + AI =?
随机推荐
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
If you ask me about R code debugging, I will tell you head, STR, help
Terms used in the Web3 community
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
抖音或将推出独立种草社区平台:会不会成为第二个小红书
STM32 system timer flashing LED
九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建
【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
Is there any way to bookmark the code in the visual studio project- Is there a way to bookmark code in a Visual Studio project?
Some understandings about 01 backpacker
[digital analog] source code of MATLAB allcycles() function (not available before 2021a)
What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
[line segment tree practice] recent requests + area and retrieval - array modifiable + my schedule I / III
Analyse approfondie de kubebuilder
Flex layout and usage
深入解析Kubebuilder
[hand torn STL] list
System framework of PureMVC
Local tool [Navicat] connects to remote [MySQL] operation