c++里面函数和指针的问题

#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是以值的方式传进去的,也就是说,两个a只是值相同而已,存放的地址并不相同。而且max函数调用完了以后,参数a就被销毁了,这时再访问它的地址就是一个随机的值,甚至有可能是重要的变量。
解决办法:把max的参数a设为引用(定义时在前面加一个&号),这样两个a就是同一个变量了。但是,a=6会改变主函数中的a的值。

如果有帮助,希望采纳,谢谢

这几个程序都会报段错误,应该是你的编译器的问题,你是不是用的 Visual studio ?