Menu
Coddy logo textTech

Передача по значению

Часть раздела Logic & Flow путешествия по C на Coddy — урок 25 из 63.

Когда вы передаете переменную в функцию на языке C, функция получает копию значения этой переменной, а не саму переменную. Эта фундаментальная концепция называется передачей по значению (pass-by-value).

Вот что происходит: если у вас есть переменная x со значением 10 и вы передаете её в функцию, функция получает свою собственную отдельную копию этого значения. Любые изменения, которые функция вносит в эту копию, не влияют на исходную переменную в вызывающей функции.

void tryToChange(int num) {
    num = 99;  // Это изменяет только копию
}

int main() {
    int x = 10;
    tryToChange(x);
    // x по-прежнему 10, а не 99
    return 0;
}

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

challenge icon

Задание

Легко

Напишите программу на языке C, которая демонстрирует концепцию передачи по значению (pass-by-value), пытаясь изменить переменную внутри функции и наблюдая, что исходная переменная остается неизменной.

Ваша программа должна:

  1. Создать функцию с именем tryToModify, которая принимает целочисленный параметр с именем number
  2. Внутри функции tryToModify прибавить 50 к параметру number
  3. Внутри функции tryToModify вывести измененное значение в формате: Inside function: [value]
  4. В функции main объявить целочисленную переменную с именем original и инициализировать ее значением 25
  5. Вывести исходное значение перед вызовом функции в формате: Before function call: [value]
  6. Вызвать функцию tryToModify и передать переменную original в качестве аргумента
  7. После вызова функции снова вывести значение original в формате: After function call: [value]

Ваш вывод должен продемонстрировать, что значение исходной переменной остается неизменным, несмотря на модификацию внутри функции:

Before function call: 25
Inside function: 75
After function call: 25

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

Шпаргалка

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

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

void tryToChange(int num) {
    num = 99;  // Это изменяет только копию
}

int main() {
    int x = 10;
    tryToChange(x);
    // x все еще 10, а не 99
    return 0;
}

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

Попробуйте сами

#include <stdio.h>

// TODO: Напишите вашу функцию tryToModify здесь

int main() {
    // TODO: Напишите ваш код здесь
    // 1. Объявите и инициализируйте исходную переменную
    // 2. Выведите значение до вызова функции
    // 3. Вызовите функцию tryToModify
    // 4. Выведите значение после вызова функции
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow