当前位置:网站首页>C语言中函数指针与指针函数
C语言中函数指针与指针函数
2022-07-06 22:21:00 【小浩编程】
数组指针
#include <stdio.h>
int getTheData(int (*p)[4],int hang,int lie)//(*p)[4]是数组指针
{
int data;
data = *(*(p+hang)+lie);//将对应数组中的值找出来
return data;
//return p[hang][lie];//同理 将对应数组中的值找出来
}
void tipsInputHangLie(int *pm, int *pn)//形参中的变量类型要与实参中相同,都是int
{
printf("输入行列值:\n");
scanf("%d%d",pm,pn);//指针就是地址,对相应的地址进行操作
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. 提示用户输入行列值
tipsInputHangLie(&ihang,&ilie);//对地址进行操作,所以函数中的操作能改变ihang和ilie的值
//2. 找出对应行列值的那个数
data = getTheData(arr,ihang,ilie);//arr是数组的地址,也就是指针
//3. 打印出来
printf("%d行%d列的值是%d\n",ihang,ilie,data);
}
输出内容
函数指针
回掉函数的底层逻辑就是函数指针
#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 ))//第三个形参是函数指针,函数指针中对类型有要求,形参名可省略
{
int ret;
ret = (*pfunc)(data1,data2);//调取函数,求得返回值
return ret;
}
int main()
{
int a = 10;
int b = 20;
int cmd;
int ret;
int (*pfunc)(int , int );
printf("请输入1(取大值),2(取小值),或者3(求和)\n");
scanf("%d",&cmd);
switch(cmd){
case 1:
pfunc = getMax;//对地址进行了更改,也就变化了对应的值
break;
case 2:
pfunc = getMin;
break;
case 3:
pfunc = getSum;
break;
default:
printf("输入错误!@输入1(取大值),2(取小值),或者3(求和)\n");
exit(-1);//异常退出
break;
}
ret = dataHandler(a,b,pfunc);//pfunc获取了对应的函数名,第三个实参pfunc是函数指针的地址
printf("ret = %d\n",ret);
return 0;
}
输出内容
函数指针数组
#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};//函数指针数组!初始化,将数组中的值(这个值是个地址,也就是指针,这个指针是个函数指针,将三个函数地址放在数组里)
for(int i=0;i<3;i++){
ret = (*pfunc[i])(a,b);//遍历数组中的三个函数指针,获取返回值
printf("ret = %d\n",ret);
}
return 0;
}
输出内容
函数指针
#include <stdio.h>
int* getPosPerson(int pos, int (*pstu)[4])//函数指针,返回指针的函数
{
int *p;
p = (int *)(pstu+pos);//二维数组地址+输入的数就是对应的数组值,然后赋值给P
return p;
}
int main()
{
int scores[3][4]={
{
55,66,77,88},//学生1
{
66,55,99,100},//学生2
{
11,22,33,59},//学生3
};
int *ppos;
int pos;
printf("请输入你需要看的学生号数:0,1,2\n");
scanf("%d",&pos);
ppos = getPosPerson(pos, scores);//获取对应数组的地址
for(int i=0;i<4;i++){
//将小数组里面的值进行遍历出来输出
printf("%d ",*ppos++);//++代表偏移一个int整形的字节数
}
return 0;
}
输出内容
二级指针
#include <stdio.h>
void getPosPerson(int pos, int (*pstu)[4],int **ppos)//函数指针,返回指针的函数
{
*ppos = (int *)(pstu+pos);//用二级指针的目的是直接修改了MAIN函数中的ppos的值
}
int main()
{
int scores[3][4]={
{
55,66,77,88},
{
66,55,99,100},
{
11,22,33,59},
};
int *ppos;
int pos;
printf("请输入你需要看的学生号数:0,1,2\n");
scanf("%d",&pos);
getPosPerson(pos, scores,&ppos);
for(int i=0;i<4;i++){
printf("%d ",*ppos++);
}
return 0;
}
输出内容
边栏推荐
- 5G VoNR+之IMS Data Channel概念
- In depth analysis of kubebuilder
- namespace基础介绍
- This "advanced" technology design 15 years ago makes CPU shine in AI reasoning
- 浙江大学周亚金:“又破又立”的顶尖安全学者,好奇心驱动的行动派
- Fix the problem that the highlight effect of the main menu disappears when the easycvr Video Square is clicked and played
- 树与图的深度优先遍历模版原理
- Detect when a tab bar item is pressed
- Kivy tutorial of setting the size and background of the form (tutorial includes source code)
- MySQL null value processing and value replacement
猜你喜欢
【实践出真理】import和require的引入方式真的和网上说的一样吗
On the 110th anniversary of Turing's birth, has the prediction of intelligent machine come true?
九章云极DataCanvas公司蝉联中国机器学习平台市场TOP 3
图灵诞辰110周年,智能机器预言成真了吗?
九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
计数排序基础思路
5G VoNR+之IMS Data Channel概念
acwing 843. N-queen problem
Introduction to namespace Basics
[line segment tree practice] recent requests + area and retrieval - array modifiable + my schedule I / III
随机推荐
Break the memory wall with CPU scheme? Learn from PayPal to expand the capacity of aoteng, and the volume of missed fraud transactions can be reduced to 1/30
Jetson nano配置pytorch深度学习环境//待完善
Data security -- 12 -- Analysis of privacy protection
sscanf,sscanf_ S and its related usage "suggested collection"
Case reward: Intel brings many partners to promote the innovation and development of multi domain AI industry
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
Advertising attribution: how to measure the value of buying volume?
What about the collapse of win11 playing pubg? Solution to win11 Jedi survival crash
当 Knative 遇见 WebAssembly
程序员上班摸鱼,这么玩才高端!
Introduction to namespace Basics
B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万
Two methods of chromosome coordinate sequencing
Gpt-3 is a peer review online when it has been submitted for its own research
两个div在同一行,两个div不换行「建议收藏」
軟件測試之網站測試如何進行?測試小攻略走起!
Vscode automatically adds a semicolon and jumps to the next line
Mathematical analysis_ Notes_ Chapter 10: integral with parameters
Gavin teacher's perception of transformer live class - rasa project actual combat e-commerce retail customer service intelligent business dialogue robot microservice code analysis and dialogue experim
Have you got the same "artifact" of cross architecture development praised by various industry leaders?