2014-10-02 36 views
-3

我将数组元素传递给一个函数。该函数将5添加到数组的每个元素。我也传递一个整数并加5 ...尽管它是一个'按值调用'的函数,整数dosn't的值在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; 
} 
+0

您需要一个指针来更改变量 – 2014-10-02 07:30:41

+0

的值,并传递整数a,然后将5加上y !!!!!!! – 2014-10-02 07:30:49

+1

当你调用'change(sharan,a)'时,会在函数内部创建并使用a的值的一个副本。 (该函数将5赋值给那个很好的副本,但与外部'a'没有任何关系,它不受影响。)将参数'y'声明为这样的引用:'void change(int x [],int&y ){...}'。那么y将成为a的别名(不是a的副本),并且y的更改将相当于a的更改。 – 2014-10-02 07:33:16

回答

5

数组衰变为指针,

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

x[i] += 5;

你改变地址的内容在x+i

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

+0

thankx很多@POW – 2014-10-03 02:54:24

1

因为array总是引用类型,所以任何的变化之外,会影响array在调用函数了。

正如你可以在你的代码中看到:

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

@PaulR它是'地址' – Rustam 2014-10-02 07:34:09

+0

谢谢@Rustam这真的很有帮助.... – 2014-10-03 02:55:38

1

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

相关问题