当前位置:网站首页>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
边栏推荐
- Depth first traversal template principle of tree and graph
- Appium practice | make the test faster, more stable and more reliable (I): slice test
- Windows are not cheap things
- DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
- Advertising attribution: how to measure the value of buying volume?
- 组织实战攻防演练的5个阶段
- leetcode 53. Maximum Subarray 最大子数组和(中等)
- 抖音或将推出独立种草社区平台:会不会成为第二个小红书
- 什么是Web3
- Intel David tuhy: the reason for the success of Intel aoten Technology
猜你喜欢
为什么很多人对技术债务产生误解
AttributeError: module ‘torch._C‘ has no attribute ‘_cuda_setDevice‘
In depth analysis of kubebuilder
How does vscade use the built-in browser?
Markdown编辑器
Programmers go to work fishing, so play high-end!
Lessons and thoughts of the first SQL injection
MySQL数据库(基础篇)
On the 110th anniversary of Turing's birth, has the prediction of intelligent machine come true?
5G VoNR+之IMS Data Channel概念
随机推荐
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
Windows are not cheap things
JS variable case
What if the win11 screenshot key cannot be used? Solution to the failure of win11 screenshot key
Win11 control panel shortcut key win11 multiple methods to open the control panel
On the 110th anniversary of Turing's birth, has the prediction of intelligent machine come true?
Have you got the same "artifact" of cross architecture development praised by various industry leaders?
[digital analog] source code of MATLAB allcycles() function (not available before 2021a)
DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
Chapter 9 Yunji datacanvas company won the highest honor of the "fifth digital finance innovation competition"!
一度辍学的数学差生,获得今年菲尔兹奖
Run the command once per second in Bash- Run command every second in Bash?
Gpt-3 is a peer review online when it has been submitted for its own research
史上最全学习率调整策略lr_scheduler
Case reward: Intel brings many partners to promote the innovation and development of multi domain AI industry
【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
日常工作中程序员最讨厌哪些工作事项?
【Android Kotlin协程】利用CoroutineContext实现网络请求失败后重试逻辑
什么是Web3