Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
10.02.2015
Размер:
105.47 Кб
Скачать

Передача аргументов.

При вызове функции в ее локальной памяти создаются соответствующие формальные аргументы. Они являются обычными локальными объектами данной функции. При этом каждый формальный аргумент инициализируется соответствующим фактическим аргументом, который указывается в самом вызове функции.

Если в функцию требуется передать внешний по отношению к ней объект, то при указании соответствующего ее формального аргумента следует использовать типы указателей или ссылок.

Если требуется сделать передаваемый объект неизменяемым внутри функции, то следует при указании формального аргумента использовать спецификатор const.

Массивы в качестве аргументов.

Если в функцию требуется передать одномерный массив, то в качестве ее формального аргумента удобно использовать указатель на элемент массива. Тогда в функцию следует передавать адрес начального элемента массива и, если требуется, размер массива. Пример передачи массива в качестве аргумента функции:

double summ(const double *pd, const size_t n) {

double s(0.0);

for(size_t i = 0; i < n; i++)

s += pd[i];

return s;

}

void main() {

const size_t N(5);

double vd[N] = {1.1, 2.2, 3.3, 4.4, 5.5};

double s = summ(vd, N);

cout << s << endl;

}

Можно в примере вместо «const double *pd» написать «const double pd[]» (причем в квадратных скобках можно указать любое целочисленное константное выражение), однако это ровным счетом ничего не меняет. Поэтому такая запись выглядит более запутанной, и значит, является непредпочтительной.

Размер массива не требуется передавать в функцию, если он может быть вычислен на основании самого массива каким-либо образом, как, например, это обеспечивается при работе с С-строками.

Применение многомерных массивов усложняет программирование на С++. Основные сложности здесь возникают при передаче многомерного массива в функцию.

Как правило, удобнее вместо многомерного массива применять одномерный массив. В функцию при этом удобно передавать адрес начального элемента массива и, если требуется, размеры соответствующего многомерного массива по каждой его размерности. Пример:

// Вывод на консоль матрицы размера m x n.

void OutMatr(const double *pd, const size_t m, const size_t n) {

size_t i, j, k;

for(i = 0; i < m; i++) {

k = i * n;

for(j = 0; j < n; j++)

cout << ‘ ‘ << pd[k + j];

cout << endl;

}

}

void main() {

const size_t M(4), N(3);

double matr[M][N] = {

{1.1, 2.2, 3.3},

{2.2, 3.3, 4.4},

{3.3, 4.4, 5.5},

{4.4, 5.5, 6.6}

};

OutMatr( &matr[0][0], M, N );

}

Возврат результата.

Возврат из функции значения подобен передаче в нее аргумента. Сам возврат производится инструкцией return. Она выполняет присвоение возвращаемого значения соответствующему принимающему объекту.

Если функция объявлена с пустым типом возвращаемого результата (является функцией типа void), то она не может возвращать какое-либо значение.

Если функция объявлена с некоторым непустым типом возвращаемого результата (не void), то она должна вернуть значение типа своего результата.

Не следует возвращать из функции адрес обычного (нестатического) локального объекта либо ссылку на такой объект. Связано это с тем, что сам объект по завершении функции исчезнет, и его содержимое будет неопределенно.

Возвращаемое из функции значение не может иметь тип массива или тип функции, но может иметь тип указателя и тип ссылки на массив или на функцию.

Соседние файлы в папке Ответы к ГОСу