【问题标题】:Changing Array elements by call by value通过按值调用更改数组元素
【发布时间】:2014-10-02 07:26:02
【问题描述】:

我将数组元素传递给函数。此函数将 5 添加到数组的每个元素。我还传递了一个整数并向其添加 5...即使它是一个“按值调用”函数,整数的值在 main() 中不会改变(这是预期的),但数组元素确实会改变。 ..

我想知道如何以及为什么?

#include <iostream>

using namespace std;

void change(int x[],int y);

int main()
{
    int sharan[]={1,2,3,4};
    int a=10;
    change(sharan,a);
    for(int j=0;j<4;j++)
    {
        cout<<sharan[j]<<endl;
    }
    cout<<endl<<"a is : "<<a;
    return(0);
}

void change(int x[],int y)
{
    for(int i=0;i<4;i++)
    {
        x[i]+=5;
    }
    y+=5;
}

【问题讨论】:

  • 你需要一个指针来改变变量的值
  • 传递整数 a 然后将 5 加到 y 上!!!!!!
  • 当您调用change(sharan,a) 时,会复制 a 的值并在函数内部使用。 (该函数将 5 分配给该副本,这很好,但与不受影响的外部 a 无关。)将参数 y 声明为如下引用:void change(int x[],int &amp;y){ ... }。然后 y 将成为 a 的别名(不是副本),对 y 的更改将等同于对 a 的更改。

标签: c++ arrays call-by-value


【解决方案1】:

数组衰减为指针,

void change(int x[],int y) 等价于void change (int *x, int y )

x[i] += 5;

你正在更改x+i地址的内容

y=5; inside change 基本上更新了地址未通过的y 的本地副本,因此change 存在后y 的实际值没有修改

【讨论】:

    【解决方案2】:

    由于array 始终是引用类型,因此外部的任何更改都会影响调用函数中的array

    正如您在代码中看到的那样:

    change(sharan,a); // here `sharan` points the base address an you are passing it.
    

    【讨论】:

    • @PaulR 它是Address
    【解决方案3】:

    C++ 不支持按值传递原始数组。当您尝试这样传递它们时,它们将转换为指向数组的指针。因此,如果您修改数组的元素,那么更改将反映在调用函数中。在这种情况下main()

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多