【问题标题】:Structures and functions(passing by reference)结构和功能(通过引用传递)
【发布时间】:2013-12-20 15:59:27
【问题描述】:

请指导我使用此代码,我想使用数组和函数存储 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;
}

【问题讨论】:

  • 我看不到您通过引用传递的位置(endlabc[i].phone 除外)。您所做的更正确地称为“按指针传递”。

标签: c++ arrays function pointers structure


【解决方案1】:

您可以使用pass(&amp;abc[0]);pass(abc); 获取指向数组中第一个元素的指针。否则,如果你单独使用&amp;abc,你会得到一个指向整个数组[5]的指针,而不是数组中的元素。

【讨论】:

  • 不太正确的解释。 &amp;abc 获取指向数组的指针,而传递 &amp;abc[0] 或仅传递 abc 将获取指向数组第一个元素的指针。由于参数的类型为ABC*,因此它需要一个指向元素的指针。
  • @sftrabbit: 对,我没想到这么解释,我会编辑的。
【解决方案2】:

数组不是指针。但是当您进行函数调用时,它们可能会衰减为指针。 所以你可以像这样传递你的数组:

pass(abc);

【讨论】:

  • +1 没有制造虚假和站不住脚的说法,但非常普遍的说法是 数组是指针
猜你喜欢
  • 2015-03-12
  • 2013-06-04
  • 2013-05-12
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
相关资源
最近更新 更多