要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