要f1
获取a_struct
,这取决于您是否希望能够在f1
. void f1(a_struct s);
可以正常工作,并制作副本。void f1(const a_struct & s);
需要一个参考,但你不能改变它(无论如何都没有麻烦)。我尽量避免非const
参考。
如果你f2
想拿一个int
,你写void f2(int);
。它不关心它int
来自哪里(即在 a 内部struct
或单独)。然后像这样称呼它f2(point.b);
使用数组的函数可能很麻烦,这取决于你想用它做什么。最简单的方法是记住数组退化为指针。
void f3 (a_struct * const structArray)
{ /* Do something */ }
a_struct myArray[10];
f3(myArray);
还有其他(更好的)方法可以做到这一点。
编辑:如果您想将函数应用于数组的每个元素,有(表面上)两种方法(如果您考虑一下,实际上只是一种方法)。循环遍历数组,并将每个元素传递给一个接受 的函数a_struct
,或者将整个数组传入(也带有 size 参数),然后在函数内部循环。即你会这样做:
a_struct myArray[10];
for (int i = 0; i < 10; ++i)
{
f1( myArray[i] );
}
// Or, better, from <algorithm>
std::for_each(myArray, myArray+10, f1);
请注意,这不是越界访问。只要从不取消引用,就可以保证允许在数组末尾创建一个指针(恰好对于这些循环情况)。
当然,这一切都假设您确实需要一个数组,而不是 a std::vector
(在这种情况下,循环看起来基本相同,除了您将使用begin()
andend()
成员函数)。
实际上,如果您有权访问,则c++11
可以使用std::begin()
and ,这对于s 或数组的std::end()
工作方式完全相同。vector