2013-12-20 85 views
0

請指導我關於這段代碼,我想用數組和函數存儲5個數據的列表,這是我的一段代碼,但是這給了我一個錯誤(「33 「):結構和功能

Cannot convert `ABC (*)[5]' to `ABC*' for argument `1' to `void pass(ABC*)' 

代碼:

#include <iostream> 

using namespace std; 

struct ABC{ 
    char name[20]; 
    int phone; 
    char address[20]; 


    }; 

    void pass(ABC *abc){ 

    for(int i=0; i<5;i++){ 
     cout<<"Enter name"<<endl; 
     cin>>abc[i].name; 

     cout<<"Enter phone"<<endl; 
     cin>>abc[i].phone; 

     cout<<"Enter address"<<endl; 
     cin>>abc[i].address;   

     } 

} 

int main() 
{ 
ABC abc[5]; 

    pass(&abc);  

system("PAUSE"); 
return EXIT_SUCCESS; 
} 
+0

我沒有看到你引用傳遞(除'endl'其他和'ABC [I] .phone')。你在做什麼更正確地稱爲「傳遞指針」。 – cHao

回答

5

您可以使用pass(&abc[0]);pass(abc);獲得一個指向數組的第一個元素。否則,如果單獨使用&abc,則會得到一個指向整個數組[5]的指針,而不是數組內的元素。

+0

不太正確的解釋。 '&abc'獲得一個指向數組的指針,而通過'&abc [0]'或者只是'abc'將得到一個指向數組的第一個元素的指針。由於該參數的類型是'ABC *',因此它需要一個指向元素的指針。 –

+0

感謝它的工作 – user3123327

+1

@sftrabbit:對,我沒有想到這種方式來解釋它,我會編輯。 – Raxvan

3

數組不是指針。但是當你正在進行函數調用時,它們會衰減到指針。 所以,你可以通過你的陣列是這樣的:

pass(abc);

+0

+1沒有使虛假和不可辯駁的,但非常普遍的聲明,*數組是指針*! –