2014-10-02 55 views
0

當我嘗試使用int傳遞數組引用時遇到錯誤(& a)[5]。 但是當我想實現它時,我們應該通過一個參考,我初始化爲 int & refer = * a; 以下是我的代碼,以及兩種將引用和指針傳遞給調用函數的方法。如何解釋我不能簡單地將參考傳遞給它?如何在我的實際參數中通過引用傳遞數組

#include <iostream> 

using namespace std; 

void add(int (&)[5],int); 
int main() 
{ 


int a[5]={5,4,3,2,1}; 
int len=sizeof(a)/sizeof(a[0]); 
cout<<"len="<<len<<endl; 
cout<<"a="<<a<<endl;// the name of array is actually the pointer 

int& refer=*a; 

add(a,len); //which is correct,we pass a pointer to the calling function; 
add(refer,len); //which is wrong,we pass a reference to the calling function; 
for(int i=0;i<len;i++){ 
    cout<<a[i]<<" "; 
} 

return 0; 
} 



void add(int (&a)[5],int len){ 
    for(int i=0;i<len;i++){ 
    a[i]=a[i]+10; 
    } 
} 
+1

如果添加只需要一個大小爲5的數組,爲什麼你通過長度?你只需要'int a []'傳遞一個數組來修改函數。在C++中,你可以使用'std :: vector &'並利用向量知道其大小的事實。 – 2014-10-02 01:53:10

+0

因爲我想知道我應該循環多少次。當我將一個[]傳遞給一個調用函數時,一個[]將衰減到指向第一個元素的指針。在這個意義上,我會失去有關這個數組大小的信息,這意味着我應該將我的數組的長度加起來。 – user3570984 2014-10-02 02:01:40

+0

@ user3570984:有了這個簽名,'a'不會衰減到指針,所以你知道它的大小(並且可能會移除int len)。 – Jarod42 2014-10-02 07:14:44

回答

2
int& refer=*a; 

這並不是數組的引用,但是它的第一個元素。嘗試:

int (&refer)[5] = a; 
add(refer,len); 
+0

至於int(&參考)[5] = a;我不太明白爲什麼可以將指針(如a)分配給引用。 – user3570984 2014-10-02 01:57:54

+1

@ user3570984:因爲'a' *不是*指針。這是一個數組。表達式'a'衰減指向特定的上下文,實質上指針是預期的。另請注意,這不是分配。它是初始化,儘管用'='符號表示。 – 2014-10-02 01:58:52

+0

@ user3570984您可以對數組(或指針)的引用幾乎與對整數的引用相同。 'int(&refer)[5] = a;''___''refer'這一行是對'a'「_的引用。 – AlexD 2014-10-02 02:02:31