ackwz 2021-10-13 17:30 采纳率: 75%
浏览 27
已结题

有关c++的数组问题

看书,发现画红线的地方不理解,有大佬解释一下为什么吗?

img

img

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-10-13 17:55
    关注

    在函数传参和返回时,其实都会发生一次浅拷贝,假设:
    int x = 3, y = 1;
    max_value(3,1); //调用函数,那么在调用函数的过程中,执行过程为:
    在max_value(int a,int max)函数中,重新声明一个变量a和max,并让a=x,max = y(这就是所谓的浅拷贝),所以在max_value函数中操作的实际上是a和max的值,并不会对x和y的值产生影响。

    如果,max_value函数修改如下:
    void max_value(int a,int*max)
    {
    if(a>*max) *max = a;
    }
    那么操作的就是y的内存,这种情况下就会对外面的值产生影响。

    C++中也有引用的概念,引用就是变量的一个别名,当函数使用引用作为参数时,不会发生浅拷贝,传入函数的就是变量本身,所以在函数中的操作也会影响函数外变量的值。
    引用方式:
    void max_value(int a,int& max)//跟你图片中的代码,仅仅只多了一个&符号
    {
    if(a>max) max = a;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月13日