问题:全局变量也可以解决这个问题,但是全局变量会导致单片机内存爆炸
解决:C语言中的函数参数可以多个传递,但是只能一个返回的问题,运用指针和地址的方式解决
- 先明确指针的定义:int *p;
- 取地址符号&
- 取值符号*
例如:int*p;
int a=66;//假设a的地址是0x55
p=&a;
printf("%d",p);//输出的是a的地址0x55
printyf("%d",*p);//输出的是a的值66
所以函数多参数的返回也是运用了上面的原理,在主函数定义变量,将主函数定义的变量的地址(&)作为函数的参数传递,这样无需返回,直接在函数里可以修改这个变量的值(*),代码如下:
#include<stdio.h>
//找出最大值和最大值的次数
void Maxandcount(int *max,int *count,const int *a,int L)//(最大值,出现的次数,只读数组,数组长度)
{
int i;
*max=a[0];//最大数设定值
*count=1;//次数设定1
for(i=1;i<L;i++)
{
if(a[i]>*max)
{
*max=a[i];
*count=1;
}
else if(a[i]==*max)
{
(*count)++;
}
}
}
int main(void)
{
int MAX=0;//最大值
int COUNT=0;//最大值的次数
int ad[]={0,10,2,10,4,5,6,7};
Maxandcount(&MAX,&COUNT,ad,8);
printf("最大值为:%d\n",MAX);
printf("出现的次数:%d\n",COUNT);
return 0;
}
程序的运行结果为: