Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Значения, возвращаемые функцией main()

Когда используется оператор return в main(), программа возвращает код завершения вызывавшему процессу (операционной системе). Возвращаемое значение должно быть целого типа. Большинство операционных систем, трактуют 0 как нормальное завершение программы. Остальные значения воспринимаются как ошибки.

Если не определено возвращаемое значение, то в операционную систему будет передано неизвестное значение. Поэтому гораздо полезнее использовать оператор return.

Правила видимости для функций

Правила видимости языка - это правила, управляющие тем, что «видит» часть программы.

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

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

Все функции в С находятся на одном уровне видимости. То есть невозможно определить функцию в функции.

Аргументы функции

Если функция использует аргументы, она должна объявлять переменные, получающие значения аргументов. Данные переменные называются формальными параметрами функции. Они ведут себя так же, как и обычные локальные переменные, то есть создаются при входе в функцию и уничтожаются при выходе из нее. Как показано в примере, объявление параметров происходит после имени функции, но перед открывающей скобкой функции: /* возвращает 1 в случае, если с является частью строки s; в противном случае возвращается 0*/ int is_in(char *s, char с) { while(*s) if(*s==c) return 1; else s++; return 0; } Функция is_in() имеет два параметра: s и с. Функция возвращает 1, если символ с является частью строки s. В противном случае она возвращает ноль.

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

Передача по значению и передача по ссылке

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

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

Помимо нескольких исключений, С для передачи аргументов использует передачу по значению. Это означает, что обычно нельзя изменять переменные, используемые при вызове функции. Рассмотрим следующую функцию: #include <stdio.h> int sqr (int x); int main(void) { int t=10; printf("%d %d", sqr(t), t); return 0; } int sqr (int x) { x = x*x; return x; } В данном примере значение аргумента, передаваемого в sqr(), 10, копируется в параметр х. Когда происходит присваивание х = х * х, модифицируется только локальная переменная х. Переменная t, используемая при вызове sqr(), по-прежнему содержит значение 10. Следовательно, на экране появится «100 10».

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]