Урок 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; }
  • Глобальные переменные доступны во всех функциях
  • Локальные переменные существуют только внутри своей функции
  • Рекомендуется минимизировать использование глобальных переменных
🏠 На главную