2014-10-02 53 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()

相關問題