对于f1
采取一种a_struct
,如果你希望能够到内f1
编辑它依赖。 void f1(a_struct s);
将正常工作,并进行复制。 void f1(const a_struct & s);
需要参考,但是你不能改变它(反正没有一些麻烦)。我尽量避免使用非const
引用。
如果你想f2
采取int
,你写void f2(int);
。它并不关心int
来自哪里(即在struct
之内或者它自己)。然后把它叫做f2(point.b);
带数组的函数可能很麻烦,这取决于你想用它做什么。最简单的方法是记住数组退化为指针。
void f3 (a_struct * const structArray)
{ /* Do something */ }
a_struct myArray[10];
f3(myArray);
还有其他(更好)的方法来做到这一点。
编辑: 如果你想将一个函数应用到数组的每个元素,有(表面上看)两种方法(如果你仔细考虑它,实际上只有一种方法)。在数组上循环,并将每个元素传递给一个函数,该函数接受一个a_struct
,或传入整个数组(并带有大小参数),然后在函数内循环。即你会做:
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);
请注意,这不是一个出界访问。只要它永远不会被解除引用,你肯定会被允许制作一个指针一个离开数组的末尾(正好适用于这些循环的情况)。
当然,这一切都假定你真的想要一个数组,而不是一个std::vector
(在这种情况下,环看基本上是相同的,除非你将使用begin()
和end()
成员函数)。
事实上,如果你有c++11
访问,您可以使用std::begin()
和std::end()
,这将连续工作vector
秒或阵列完全相同。
我有一本书,并通过彻底翻阅以及在线搜索。这本书概述了结构的基本用法,它没有任何明确说明它们如何传递给函数的内容。虽然我在网上发现了一些,但我没有发现关于传递结构数组的任何信息。 – user1768079
'struct'是正常类型和正常参数。一旦你了解了基础知识,以及如何使用函数及其参数,你就会找出你的问题的答案。你不能像这样通过这本书。 –