用C++求输入三个数的最大值和最小值,要求用指针和函数,请问这么写到底哪里出错了

#include<iostream>
using namespace std;
void fun(int a,int b,int c,int *max,int *min);
int main()
{
int a,b,c;
int *p,*q;
cin>>a>>b>>c;
fun(a,b,c,p,q);
cout<<"max="<<*p<<","<<"min="<<*q<<endl;
return 0;
}
void fun(int a,int b,int c,int *max,int *min)
{
*max=a;
*min=a;
if(b>*max)
*max=b;
if(c>*max)
*max=c;
if(b<*min)
*max=b;
if(c<*min)
*min=c;
}
检查是0 error,但运行时一输入三个数字就显示内存不能为written,到底是哪里出错了?

因为你都不知道p和q指向什么地方,就在main函数中对它们用*号了。
你这个其实就是访问了自己未分配的内存。

你可以把main函数修改如下:
int p,q;
cin>>a>>b>>c;
fun(a,b,c,&p,&q);
这种方法是把变量的地址传给指针,实际指针就指向该变量了。

也可以如下修改
int *p,*q;
int temp1,temp2;
p=&temp1;
q=&temp2;
cin>>a>>b>>c;
fun(a,b,c,&p,&q);
这种方法是确保指针指向一个确定的地方,但是还是前面一种方法好。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-24
p、q这两个指针未初始化,相当于是野指针。max、min的值会在程序返回后注销,不会返回给p跟q

可以做如下更改

#include<iostream>
using namespace std;
void fun(int a,int b,int c,int *max,int *min);
int main()
{
int a,b,c;
int p,q;
cin>>a>>b>>c;
fun(a,b,c,&p,&q);
cout<<"max="<<p<<","<<"min="<<q<<endl;
return 0;
}
void fun(int a,int b,int c,int *max,int *min)
{
*max=a;
*min=a;
if(b>*max)
*max=b;
if(c>*max)
*max=c;
if(b<*min)
*min=b;
if(c<*min)
*min=c;
}追问

非常感谢,但是我还是不明白为什么我没有初始化指针就不能用到函数中呢,我把它们定义成空指针也不行,主函数和fun函数形参实参到底是怎么传递的呢

追答

形参实参之间的指针传递是通过实参的地址来传递的。
举个不太恰当的例子,比如说,送快递。如果你告诉快递员你的收件地址,快递员就会把物品送到指定地点并把物品给你,然后回去交差。如果你没告诉快递员你的收件地址,则快递员就不知道将物品送到哪里,只能随便找个地方转悠一圈,然后回去交差,物品也被快递公司回收了。

指针实参形参之间的传递跟上面的快递差不多。实参就是你,形参就是快递员。如果实参指针没有初始化或者未NULL,就等于实参指针没有指向具体的地址,则形参不知道将数据写到哪个地址上。

本回答被提问者采纳
相似回答