weixin_44027407
琅然i
采纳率0%
2018-12-09 02:42

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的结果又不正确了,请问这是为什么><

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • mengjinke 流星杀手剑 3年前

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

    点赞 评论 复制链接分享
  • weixin_41461277 _ZGq 3年前

    首先注意:最好不要用max、min等做函数名,因为C++标准库中已经用了。不过这里max函数只有一个参数是不会影响的。

    主要原因:max函数中的a和主函数中的a不是一个变量!

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

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

    点赞 评论 复制链接分享

相关推荐