通过值调用更改数组元素

时间:2014-10-02 07:26:02

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

我将数组元素传递给函数。此函数为数组的每个元素添加5。我也传递一个整数并向它添加5 ...即使它是按值调用'函数整数dosn的变化值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;
}

3 个答案:

答案 0 :(得分:5)

数组衰减到指针,

void change(int x[],int y)相当于void change (int *x, int y )

x[i] += 5;

您正在x+i

更改地址内容 y=5;内{p> change基本上更新了地址未通过的y的本地副本,因此在{{1}之后y的实际值没有修改存在

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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