通过引用将Struct Array传递给Function

时间:2011-09-16 02:18:42

标签: c++ struct

我想知道如何通过引用将结构数组传递给函数。我发现如何使用指针来完成它,但也希望通过引用学习。这是我到目前为止的代码。

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

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

我以为我刚做了employeeType& emp或employeeType& emp []但是得到错误,我用google搜索的所有东西都做了指针。

以下是pastebin的完整代码,用于澄清我的学习实验:     http://pastebin.com/6NfZ3LC4

3 个答案:

答案 0 :(得分: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不同的类型。这就是为什么你不能为“所有数组”提供单一功能的原因。)

答案 1 :(得分: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));

答案 2 :(得分:0)

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

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

emp[0]*emp完全相同,语法不同。它们的行为完全相同。

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

相关问题