c++关于指针变量作为函数参数的编程题帮忙查错

原题如下:一个数组有n个元素,要求编写一个函数(参数为指针变量),求取数组的最大值和最小值(通过参数返回)。在主函数中调用该函数,通过参数返回数组的最大值和最小值。我的编... 原题如下:一个数组有n个元素,要求编写一个函数(参数为指针变量),求取数组的最大值和最小值(通过参数返回)。在主函数中调用该函数,通过参数返回数组的最大值和最小值。
我的编成如下:
#include <iostream>
using namespace std;
void m_m(float num[100],int n,float *max,float *min);
void main()
{
float num[100];
cout<<"请输入你想定义的数组所包含的元素的个数"<<endl;
int n;
cin>>n;
cout<<"请对这"<<n<<"个元素依次赋值"<<endl;
int i;
for(i=0;i<n;i++)
cin>>num[i];
float *max,*min;
max=&num[0];
min=&num[0];
m_m(num,n,max,min);
cout<<"这个数组的"<<endl;
cout<<"最大值为"<<*max<<endl;
cout<<"最小值为"<<*min<<endl;
}
void m_m(float num[],int n,float *max,float *min)
{
int i;
for(i=0;i<n;i++)
{
if(num[i]>*max)
max=&num[i];
if(num[i]<*min)
min=&num[i];
}
}
补充:不知为什么,如果在函数里让其输出*max和*min,都是正确的,可好像值就是返回不到主函数去。似乎回到主函数后,*max和*min又变到初始赋值的num[0]了,可是明明要执行函数呀?
希望高手来解决一下,感谢!
展开
 我来答
忘至白葬不情必0T
2009-12-30 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
初学者常犯的错误,把指针类型的参数当成指针传递了。

这里你想改变的是一级指针变量max和min的值,因此采用指针传递的方式的话,就要传max和min的指针,也就是二级指针了。

正确的做法是在main里面把max和min定义成float,代码如下:
float max,min;
max=num[0];
min=num[0];
m_m(num,n,&max,&min);
cout<<"这个数组的"<<endl;
cout<<"最大值为"<<max<<endl;
cout<<"最小值为"<<min<<endl;
}
void m_m(float num[],int n,float *max,float *min)
{
int i;
for(i=0;i<n;i++)
{
if(num[i]>*max)
*max=num[i];
if(num[i]<*min)
*min=num[i];
}
}

当然了,最简单的方法就是用引用传递,直接把
void m_m(float num[100],int n,float *max,float *min)
改成
void m_m(float num[100],int n,float *&max,float *&min)
就行了
百度网友1a0c9ec
2009-12-30 · TA获得超过862个赞
知道小有建树答主
回答量:245
采纳率:0%
帮助的人:346万
展开全部
给你修改了一下。记住指针传值并不是说你要把max定义为指针类型。把max定义为int就可以,在传值的时候传地址,用一个指针接收就可以,因为指针里面存的是地址。这样就可以达到改变max的值的目的
#include <iostream>
using namespace std;
void m_m(float num[100],int n,float *max,float *min);
void main()
{
float num[100];
cout<<"请输入你想定义的数组所包含的元素的个数"<<endl;
int n;
cin>>n;
cout<<"请对这"<<n<<"个元素依次赋值"<<endl;
int i;
for(i=0;i<n;i++)
cin>>num[i];
float max,min;
max=num[0];
min=num[0];
m_m(num,n,&max,&min);
cout<<"这个数组的"<<endl;
cout<<"最大值"<<max<<endl;
cout<<"最小值"<<min<<endl;
}
void m_m(float num[],int n,float *max,float *min)
{
int i;
for(i=0;i<n;i++)
{
if(num[i]>*max)
*max=num[i];
if(num[i]<*min)
*min=num[i];
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fposkln
2009-12-30 · TA获得超过412个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:0
展开全部
/*
你要改变指针的指向,必须采用指向指针的指针传递地址
*/
#include <iostream>
using namespace std;
void m_m(float num[100],int n,float **max,float **min);
void main()
{
float num[100];
cout<<"请输入你想定义的数组所包含的元素的个数"<<endl;
int n;
cin>>n;
cout<<"请对这"<<n<<"个元素依次赋值"<<endl;
int i;
for(i=0;i<n;i++)
cin>>num[i];
float *max,*min;
max=&num[0];
min=&num[0];
m_m(num,n,&max,&min);
cout<<"这个数组的"<<endl;
cout<<"最大值为"<<*max<<endl;
cout<<"最小值为"<<*min<<endl;
}
void m_m(float num[],int n,float **max,float **min)
{
int i;
for(i=0;i<n;i++)
{
if(num[i]>**max)
*max=&num[i];
if(num[i]<**min)
*min=&num[i];
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式