2011-09-16 198 views
0

我已经使用Google搜索并找不到答案。我想知道如何通过引用传递一个结构数组到一个函数。我发现如何用指针来做,但也想学习参考。这是我迄今为止的代码(对我来说很抱歉,我不评论我的个人实验来学习东西)。通过引用将结构数组传递给函数

struct employeeType 
{ 
string firstName; 
... 
double monthlyBonus; 
}; 

void readEmpData(ifstream& infile, employeeType *emp, int length); 

我想我只是做了employeeType & EMP或employeeType & EMP [],但出现错误和一切我用Google搜索只是做了指针。

这里是一个引擎收录的全部代码澄清我的学习实验: http://pastebin.com/6NfZ3LC4

+0

已经在这里回答:http://stackoverflow.com/questions/1106957/pass-array-by-reference-in-c –

+0

@丹尼尔,这可能是不同的。看起来他正在尝试返回一个数组。 –

回答

0

我假设你想readEmpData在员工从一个文件中的阵列读取。在这种情况下,调用者不知道有多少员工,因此数组及其长度应该是输出参数。适当的签名是:

void readEmpData(ifstream & infile, employeeType *& emp, int & length); 

employeeType * readEmpData(ifstream & infile, int & length); 

你也可以定义employeeType运营商<<和使用STL阅读:

vector<employeeType> employees; 
copy(istream_iterator(file), istream_iterator(), back_inserter(employees)); 
+0

我尝试了employeeType *&emp,并得到它的错误。我只是用* emp来修复它。我在尝试了其他方法和其他人的方法以备将来参考之后对其做了注释。 –

3

是一个固定大小的数组?如果没有,你可以使用一个模板:

template <unsigned int N> 
void myFunction(Foo (&arr)[N]) 
{ 
    // arr[0] etc. 
} 

当然,这只适用于编译时数组工作:

void f() 
{ 
    Foo a[10]; 
    myFunction(a); // OK 

    Foo * b = new Foo[11]; 
    myFunction(b); // error, nonsense, b is a pointer, not an array 
} 

(如果您的数组大小相同的始终,你可以跳过模板,并把尺寸为参数直接。需要注意的是“数组”不是一个类型在C++中,而是T[N]不同类型每个N。这就是为什么你不能有一个单一功能的“全阵列” )

0

指针可以是指向单个对象或指向对象数组的指针。没有区别。你没有发现任何对数组的引用的原因是它通常是多余的。

*emp将访问单个对象或数组的第一个对象。

emp[0]与使用不同语法的*emp完全相同。他们都表现完全一样。

emp[1]将获得数组中的第二个对象。 C++如何知道你将数组传递给函数?它没有。它期望跟踪指针是否指向一个数组,以及数组的大小。

+0

学习多余的东西仍然有用。永远不知道你什么时候会遇到一位喜欢冗余的老板。 –

+0

@Clayton,我没有试图做出价值判断,只是说明为什么你没有找到关于这个问题的很多材料。通常,当有两种不同的做事方式时,人们会倾向于更简单的方式,尤其是当更简单的方式是C中的* only *方式时。 –