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);
これを行う他の(より良い)方法もあります。
編集:配列のすべての要素に関数を適用する場合は、(表面的には)2つのアプローチがあります(これについて考えると、実際には1つのアプローチにすぎません)。配列をループし、各要素をを受け取る関数に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);
これは範囲外のアクセスではないことに注意してください。逆参照されない限り、(これらのループ状況で正確に)配列の末尾から1つ離れたポインターを作成できることが保証されます。
もちろん、これはすべて、実際には配列ではなく配列が必要であることを前提としていますstd::vector(この場合、ループは基本的に同じように見えますが、begin()およびend()メンバー関数を使用する場合を除きます)。
実際、にアクセスできる場合は、とc++11を使用できます。これは、 sまたは配列に対してまったく同じように機能します。std::begin()std::end()vector