2013-12-20 88 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没有使虚假和不可辩驳的,但非常普遍的声明,*数组是指针*! –