Назад к вопросам
Junior
88
questionbank

Расскажи о способах передачи параметров в функции на языке C/C++.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Существует три основных способа передачи параметров в функции на C/C++:

  1. Передача по значению (Pass by Value)

    • В функцию передается копия значения аргумента.
    • Изменения параметра внутри функции не влияют на исходный аргумент вне ее.
    • Безопасно, но может быть неэффективно для больших объектов из-за создания копии.
    void func_by_value(int x) {
        x = x * 2; // Изменяется только локальная копия
    }
    
    int main() {
        int a = 5;
        func_by_value(a);
        // a по-прежнему равно 5
        return 0;
    }
    
  2. Передача по ссылке (Pass by Reference)

    • В функцию передается псевдоним исходной переменной.
    • Изменения параметра внутри функции напрямую влияют на исходный аргумент.
    • Эффективно, так как не создается копия.
    • Можно использовать константные ссылки (const &) для предотвращения изменений.
    void func_by_reference(int& x) {
        x = x * 2; // Изменяет исходную переменную
    }
    
    int main() {
        int a = 5;
        func_by_reference(a);
        // a теперь равно 10
        return 0;
    }
    
  3. Передача по указателю (Pass by Pointer)

    • В функцию передается адрес исходной переменной.
    • Изменения параметра через разыменование указателя (*) влияют на исходный аргумент.
    • Требует дополнительной проверки указателя на nullptr.
    • Позволяет передавать "нулевое" значение (nullptr), указывая на отсутствие объекта.
    void func_by_pointer(int* x) {
        if (x != nullptr) {
            *x = *x * 2; // Изменяет значение по адресу, на который указывает x
        }
    }
    
    int main() {
        int a = 5;
        func_by_pointer(&a); // Передаем адрес переменной a
        // a теперь равно 10
    
        func_by_pointer(nullptr); // Пример передачи нулевого указателя
        return 0;
    }
    
Способ Что передается Изменение оригинала Эффективность (для больших объектов) Безопасность (изменения) Возможность "нулевого" значения Синтаксис вызова
По значению Копия значения Нет Низкая Высокая Нет функция(переменная)
По ссылке Псевдоним переменной Да Высокая Низкая (если не const) Нет функция(переменная)
По указателю Адрес переменной Да (через *) Высокая Средняя (нужна проверка) Да (nullptr) функция(&переменная)