Чтобы 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
s или массивов.
person
BoBTFish
schedule
29.11.2012
struct
ures — это обычные типы и обычные параметры. Как только вы поймете основы и как использовать функции и их параметры, вы найдете ответ на свой вопрос. Вы не можете просто так пройтись по книге. - person Kiril Kirov   schedule 29.11.2012