Читайте также: |
|
Параметры предназначены для передачи входных и выходных данных (переменных) подпрограммы.
В заголовке подпрограммы объявляется тип каждого формального параметра. При вызове указываются аргументы вызова – фактические параметры.
При вызове подпрограммы происходит согласование параметров:
- порядок и типы формальных параметров в объявлении и определении подпрограммы должны совпадать с порядком и типами фактических параметров при вызове подпрограммы.
После вызова подпрограммы выполняются ее операторы, где фактические параметры подставляются вместо формальных параметров.
Передача параметров и согласование формальных и фактических параметров может осуществляться
· по значению;
· по ссылке (по адресу).
Передача параметров по значению. При передаче параметра по значению фактический параметр может быть выражением, в частном случае переменной или константой. Формальному параметру присваивается значение выражения, тип которого должен совпадать с типом формального параметра. В подпрограмме используется только значение фактического параметра, любые изменения параметра в подпрограмме не влияют на его значение в вызывающей программе. Таким способом можно передавать только входные параметры, т.е. можно передать данные от вызывающей программы к подпрограмме.
Передача параметров по ссылке. При передаче параметра по ссылке фактический параметр может быть только переменной, тип которой должен соответствовать типу формального параметра. Передается не значение фактического параметра, а его адрес. При выполнении подпрограммы фактический параметр заменяет формальный параметр, действия выполняются над фактическим параметром. Изменения параметра в подпрограмме меняют его значение в вызывающей программе. Таким способом можно передавать и входные, и выходные параметры, т.е. можно передать данные от вызывающей программы к подпрограмме и в обратном направлении.
В языке С параметры всегда передаются по значению, т.е. непосредственно можно использовать только входные параметры. Передачу выходных параметров по ссылке можно реализовать с помощью указателей (ссылок, адресов). При передаче параметра по ссылке в вызове функции нужно получить его адрес с помощью операции &, например &x, а в заголовке функции тип параметра должен быть указатель, например int *x.
Упрощенное правило:
Для передачи параметра по ссылке в заголовке и теле подпрограммы перед именем параметра необходимо указывать символ *, а при вызове - символ &.
Массивы всегда передаются по ссылке. Имя массива является адресом его первого элемента, поэтому на параметры – массивы правило не распространяется (т.е. не нужны символы * и &). Размер массива рекомендуется передавать отдельным параметром. В случае со строкой (символьным массивом) размер строки обычно не передают, т.к. конец строки определяется завершающим нуль символом –‘\0’.
Пример заголовка функции с параметром массив:
float f (int n, float m[]) - вещественная функция f от целочисленного параметра n (количество элементов массива) и вещественного массива m[].
Пример вызова этой функции:
int k; float z[100], t;
t = f (k, z);
Дата добавления: 2015-07-26; просмотров: 79 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ПОДПРОГРАММЫ | | | Область действия переменных |