#include<iostream>
using namespace std;
int *max(int a)
{
a=6;
return &a;
}
int main()
{
int a(5),*p;
p=max(a);
cout<<*p;
system("pause");
return 0;
}
这是一个简单的程序,输出结果是6,但是如果改成下面这样
#include<iostream>
using namespace std;
int *max(int a)
{
a=6;
return &a;
}
int main()
{
int a(5),*p;
p=max(a);
cout<<*p<<'\n';
system("pause");
return 0;
}
输出结果就变成10了,甚至改成下面
#include<iostream>
using namespace std;
int *max(int a)
{
a=6;
return &a;
}
int main()
{
int a(5),*p;
p=max(a);
cout<<a;
cout<<*p;
system("pause");
return 0;
}
p的结果又不正确了,请问这是为什么><
首先注意:最好不要用max、min等做函数名,因为C++标准库中已经用了。不过这里max函数只有一个参数是不会影响的。
max函数中的a是以值的方式传进去的,也就是说,两个a只是值相同而已,存放的地址并不相同。而且max函数调用完了以后,参数a就被销毁了,这时再访问它的地址就是一个随机的值,甚至有可能是重要的变量。
解决办法:把max的参数a设为引用(定义时在前面加一个&号),这样两个a就是同一个变量了。但是,a=6会改变主函数中的a的值。
如果有帮助,希望采纳,谢谢
这几个程序都会报段错误,应该是你的编译器的问题,你是不是用的 Visual studio ?