C语言——指针(1.5用指针变量作函数参数的程序实例)
2021/10/30 20:16:30
本文主要是介绍C语言——指针(1.5用指针变量作函数参数的程序实例),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上一小节,我们了解了什么是按值调用和模拟按引用调用,简单回顾一下,按值调用是通过变量的地址存储值,通过变量名访问值;模拟按引用调用则是采用指针解决问题的方式。在这一小节,我们将对指针变量作为函数参数的一些程序做一些实现。
练习:
例题1.5从键盘输入某班学生某门课的成绩(每班人数最多不超过40人,具体人数由键盘输入),试分析下面的程序能否实现计算并输出最高分及相应的学生的学号。
#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int pMaxScore,long pMaxNum)
{
int i;
pMaxScore=score[0];//假设第一个同学为最高分
pMaxNum=num[0];//记录当前学生学号
for (i=1;i<n;i++)
{
if (score[i]>pMaxScore)//获得最高分
{
pMaxScore=score[i];//不用交换,直接覆盖值
pMaxNum=num[i];
}
}
}
int main()
{
int score[N],maxScore;
int n,i;
long num[N],maxNum;
printf("How many students?\n");
scanf("%d",&n);
printf("Input students's ID and score:\n");
for (i=0;i<n;i++)
{
scanf("%ld%d",&num[i],&score[i]);
}
FindMax(score,num,n,maxScore,maxNum);
printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
return 0;
}
其运行结果如下:
How many students?
2
Input students's ID and score:
2020212100 85
2020212101 95
maxScore=16,maxNum=0
很显然,这并不是我们想要的答案,我们试着找一下程序问题所在,发现函数并没有返回值,并且我们需要的应该是两个返回值,上一小节,我们说了,如果单一返回值时,可以用按值调用且加return 变量 的形式,但是FindMax这个函数,我们要返回两个值,maxScore和maxNum,显然,我们只能用模拟按引用调用,调试程序如下:
#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum)
{
int i;
*pMaxScore=score[0];//假设第一个同学为最高分
*pMaxNum=num[0];//记录当前学生学号
for (i=1;i<n;i++)
{
if (score[i]>*pMaxScore)//获得最高分
{
*pMaxScore=score[i];//不用交换,直接覆盖值
*pMaxNum=num[i];
}
}
}
int main()
{
int score[N],maxScore;
int n,i;
long num[N],maxNum;
printf("How many students?\n");
scanf("%d",&n);
printf("Input students's ID and score:\n");
for (i=0;i<n;i++)
{
scanf("%ld%d",&num[i],&score[i]);
}
FindMax(score,num,n,&maxScore,&maxNum);
printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
return 0;
}
其结果运行如下:
How many students?
2
Input students's ID and score:
2020212100 85
2020212101 95
maxScore=95,maxNum=2020212101
显然,程序结果是对的,模拟按引用调用的方案解决了这个问题。这一小节加深了我们对单一返回值和多个返回值之间区别的印象,和按值调用和模拟按引用调用之间的区别。有兴趣的小伙伴可以自己敲一下代码感受一下哦!
这篇关于C语言——指针(1.5用指针变量作函数参数的程序实例)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享