Основы C/C++

Функции и передача параметров в C и C++

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

Введение

По умолчанию при передаче переменной в функцию C и C++ создают её копию, поэтому изменения внутри функции не затрагивают исходную переменную. Если функция должна менять оригинал, вызывающий код должен разрешить это явно: указателем в C или ссылкой в C++.

Главное

  • Включите предупреждения компилятора (compiler warnings) и исправьте их все.
  • Хорошо понимайте тип и время жизни (lifetime) каждого значения.
  • Всегда проверяйте входные данные и границы индексов массивов.

Примеры кода на C и C++

C
Запустить →
main.c
#include <stdio.h>

void swap_ints(int *left, int *right) {
    int temporary = *left;
    *left = *right;
    *right = temporary;
}

int main(void) {
    int a = 4, b = 9;
    swap_ints(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}
Результат выполнения
9 4
C++
Запустить →
main.cpp
#include <iostream>

void swap_ints(int& left, int& right) {
    int temporary = left;
    left = right;
    right = temporary;
}

int main() {
    int a = 4, b = 9;
    swap_ints(a, b);
    std::cout << a << ' ' << b << '\n';
}
Результат выполнения
9 4

Сравнение C и C++

В C функция swap_ints получает адреса двух переменных и через оператор * обращается к ним, чтобы поменять значения. В C++ ссылка (reference) работает как другое имя исходной переменной, поэтому синтаксис короче, а значение всё равно меняется. Ключевое слово const у параметра означает, что функция читает данные, но не меняет их.

C

C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.

C++

C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.

Упражнения для практики

Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.

  • Проверьте неверный ввод и граничные значения.
  • Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
  • Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.

Попрактикуйтесь на задаче

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

Все задачи