琅然i 2018-12-09 02:42 采纳率: 0%
浏览 433

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条回答 默认 最新

  • _ZGq 2018-12-09 05:14
    关注

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

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算