Передача по значению
Часть раздела 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;
}Такое поведение защищает ваши исходные данные от случайного изменения функциями. Однако это также означает, что если вы хотите, чтобы функция действительно изменила значение переменной, передача по значению не сработает. Понимание этого ограничения крайне важно для дальнейшего изучения указателей и того, как они могут решить эту проблему.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует концепцию передачи по значению (pass-by-value), пытаясь изменить переменную внутри функции и наблюдая, что исходная переменная остается неизменной.
Ваша программа должна:
- Создать функцию с именем
tryToModify, которая принимает целочисленный параметр с именемnumber - Внутри функции
tryToModifyприбавить 50 к параметруnumber - Внутри функции
tryToModifyвывести измененное значение в формате:Inside function: [value] - В функции
mainобъявить целочисленную переменную с именемoriginalи инициализировать ее значением 25 - Вывести исходное значение перед вызовом функции в формате:
Before function call: [value] - Вызвать функцию
tryToModifyи передать переменнуюoriginalв качестве аргумента - После вызова функции снова вывести значение
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции