2.编写一个函数,求一个整型数组的最大值、最小值,函数原型为:void func(int a[],int n,int *pmax,int *pmin);体会使用形参返回值返回多个值方法。
p.s.看似简单,暗藏玄机
1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例。只有传入指针的指针,才能改变指针的指向。
2、函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值。指针就是地址变量,在函数里改变地址变量的值时,不会改变主函数实参地址变量的值。只有在函数里改变指针所指向的变量的值时 主函数实参指针所指向的变量的值才会改变。
只看资料不试代码不好理解,看看楼主的代码
#include<stdio.h>
int main()
{int i=0,n=0,a[80],max=0,min=0;
void func(int a[],int n,int *pmax,int *pmin);
int *pmax=NULL,*pmin=NULL;
printf("please input number:\n");
do{scanf("%d",&a[i]);
i++;
}while(getchar()!='\n');
n=i;
pmax=&max;
pmin=&min;
func(a,n,pmax,pmin);
return 0;
}
void func(int a[],int n,int *pmax,int *pmin)
{int i=0;
pmax=pmin=&a[0];
for(i=0;i<n;i++)
{ if(*pmax<a[i])
{pmax=&a[i];
}
}
for(i=0;i<n;i++)
{ if(*pmin>a[i])
{pmin=&a[i];
}
}
printf("the max:%d\nthe min:%d\n",*pmax,*pmin);
}
运行结果
如果直接没有
pmax=&max;
pmin=&min;
func(a,n,pmax,pmin);
直接写成
func(a,n,&max,&min);
实参的值是没有改变的,,,不信的可以去试试????
透露一句,楼主加入了工作室,以后会学习链码,真的是纯自学啊,给了篇论文,自己去看懂。。。????
下一篇 指针作业3