Урок 4: Функции в C
Функции — это независимые блоки кода, которые выполняют определённую задачу. Они помогают организовать программу, делая её более читаемой и модульной. Функции можно вызывать многократно из разных частей программы.
Базовая структура функции
Каждая функция имеет тип возвращаемого значения, имя, список параметров и тело функции.
#include <stdio.h>
// Объявление функции (прототип)
int sum(int a, int b);
int main() {
int result = sum(5, 3);
printf("Сумма: %d\n", result);
return 0;
}
// Определение функции
int sum(int a, int b) {
return a + b;
}
int sum(int a, int b)— функция с именем sum, принимает два целых числа, возвращает целое числоreturn a + b;— возвращает результат сложения- Прототип функции объявляется до main(), а определение может быть после
Функции без возвращаемого значения
Тип void указывает, что функция не возвращает значение.
#include <stdio.h>
void printGreeting(char name[]) {
printf("Привет, %s!\n", name);
}
int main() {
printGreeting("Иван");
printGreeting("Мария");
return 0;
}
void— функция не возвращает значение- Функция может выполнять действия (например, вывод) без возврата результата
char name[]— передача массива символов (строки)
Передача параметров по значению
В C параметры передаются по значению — функция получает копию данных, изменения не влияют на оригинал.
#include <stdio.h>
void increment(int x) {
x = x + 1;
printf("Внутри функции: %d\n", x);
}
int main() {
int number = 5;
increment(number);
printf("В main: %d\n", number); // number остался 5
return 0;
}
- Функция
incrementизменяет только локальную копию - Переменная
numberв main() остаётся неизменной - Для изменения оригинала нужно использовать указатели (следующий урок)
Рекурсия
Функция может вызывать саму себя — это называется рекурсией.
#include <stdio.h>
// Вычисление факториала рекурсивно
int factorial(int n) {
if (n <= 1) {
return 1; // Базовый случай
}
return n * factorial(n - 1); // Рекурсивный вызов
}
int main() {
int result = factorial(5); // 5! = 120
printf("5! = %d\n", result);
return 0;
}
- Рекурсивная функция должна иметь базовый случай для остановки
factorial(5)вызываетfactorial(4), затемfactorial(3)и т.д.- Результаты вычисляются при возврате из рекурсии: 1 × 2 × 3 × 4 × 5 = 120
Локальные и глобальные переменные
Переменные могут быть объявлены внутри функции (локальные) или вне всех функций (глобальные).
#include <stdio.h>
int globalVar = 100; // Глобальная переменная
void testScope() {
int localVar = 50; // Локальная переменная
printf("Local: %d, Global: %d\n", localVar, globalVar);
}
int main() {
testScope();
printf("Global: %d\n", globalVar);
// printf("%d", localVar); // ОШИБКА! localVar недоступна
return 0;
}
- Глобальные переменные доступны во всех функциях
- Локальные переменные существуют только внутри своей функции
- Рекомендуется минимизировать использование глобальных переменных