Статья: Функции в С++
Например:
void compute1(int* vec_ptr, int vec_size); // одинспособ
struct vec { // другойспособ
int* ptr;
int size;
};
void compute2(vec v);
С многомерными массивами все хитрее, но часто можно вместо них использовать векторы указателей, которые не требуют специального рассмотрения.
Например:
char* day[] = {
"mon", "tue", "wed", "thu", "fri", "sat", "sun"
};
С другой стороны, рассмотрим определение функции, которая работает с двумерными матрицами. Если размерность известна на стадии компиляции, то никаких проблем нет:
void print_m34(int m[3][4])
{
for (int i = 0; i<3; i++) {
for (int j = 0; j<4; j++)
cout << " " << m[i][j];
cout << "\n";
}
}
Матрица, конечно, все равно передается как указатель, а размерности используются просто для удобства записи.
Первая размерность массива не имеет отношения к задаче отыскания положения элемента . Поэтому ее можно передавать как параметр:
void print_mi4(int m[][4], int dim1)
{
for (int i = 0; i
Параметры по Умолчанию
Часто в самом общем случае функции требуется больше параметров, чем в самом простом и более употребительном случае. Например, в библиотеке потоков есть функция hex(), порождающая строку с шестнадцатиричным представлением целого. Второй параметр используется для задания числа символов для представления первого параметра. Если число символов слишком мало для представления целого, происходит усечение, если оно слишком велико, то строка дополняется пробелами. Часто программист не заботится о числе символов, необходимых для представления целого, поскольку символов достаточно. Поэтому для нуля в качестве второго параметра определено значение "использовать столько символов, сколько нужно". Чтобы избежать засорения программы вызовами вроде hex(i,0), функция описывается так:
extern char* hex(long, int =0);
Инициализатор второго параметра является параметром по умолчанию. То есть, если в вызове дан только один параметр, в качестве второго используется параметр по умолчанию.