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]了,可是明明要执行函数呀?
希望高手来解决一下,感谢! 展开
我的编成如下:
#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]了,可是明明要执行函数呀?
希望高手来解决一下,感谢! 展开
展开全部
初学者常犯的错误,把指针类型的参数当成指针传递了。
这里你想改变的是一级指针变量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)
就行了
这里你想改变的是一级指针变量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)
就行了
展开全部
给你修改了一下。记住指针传值并不是说你要把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];
}
}
#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];
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
你要改变指针的指向,必须采用指向指针的指针传递地址
*/
#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];
}
}
你要改变指针的指向,必须采用指向指针的指针传递地址
*/
#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];
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询