当前位置:网站首页>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 
边栏推荐
- In depth analysis of kubebuilder
- Chapter 9 Yunji datacanvas company has been ranked top 3 in China's machine learning platform market
- Deeply cultivate the developer ecosystem, accelerate the innovation and development of AI industry, and Intel brings many partners together
- A series of shortcut keys for jetbrain pychar
- Oracle - views and sequences
- 广告归因:买量如何做价值衡量?
- What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
- Common Oracle SQL statements
- What if win11 pictures cannot be opened? Repair method of win11 unable to open pictures
- Lessons and thoughts of the first SQL injection
猜你喜欢

Basic idea of counting and sorting
![[practice leads to truth] is the introduction of import and require really the same as what is said on the Internet](/img/58/4337f0972f7171a5c21e640f03e0b7.png)
[practice leads to truth] is the introduction of import and require really the same as what is said on the Internet

acwing 843. n-皇后问题

How to open win11 remote desktop connection? Five methods of win11 Remote Desktop Connection

Oracle -- 视图与序列

AI landing new question type RPA + AI =?

Introduction to namespace Basics

Time complexity & space complexity
![A detailed explanation of head pose estimation [collect good articles]](/img/22/7ae0b12c3d945b449bcc8bb4a8961b.jpg)
A detailed explanation of head pose estimation [collect good articles]

Have you got the same "artifact" of cross architecture development praised by various industry leaders?
随机推荐
Section 1: (3) logic chip process substrate selection
Factor analysis r practice (with R installation tutorial and code)
System framework of PureMVC
Basic idea of counting and sorting
指针与数组在函数中输入实现逆序输出
使用Thread类和Runnable接口实现多线程的区别
每人每年最高500万经费!选人不选项目,专注基础科研,科学家主导腾讯出资的「新基石」启动申报
【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
Flex layout and usage
日常工作中程序员最讨厌哪些工作事项?
Analyse approfondie de kubebuilder
Intel David tuhy: the reason for the success of Intel aoten Technology
Wechat can play the trumpet. Pinduoduo was found guilty of infringement. The shipment of byte VR equipment ranks second in the world. Today, more big news is here
为什么很多人对技术债务产生误解
A picture to understand! Why did the school teach you coding but still not
JS variable
Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
A row of code r shows the table of Cox regression model
ServiceMesh主要解决的三大痛点
未婚夫捐5亿美元给女PI,让她不用申请项目,招150位科学家,安心做科研!