Menu
Coddy logo textTech

Изменение переменных через указатели

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

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

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

void doubleValue(int *ptr) {
    *ptr = *ptr * 2;  // Разыменование для изменения исходного значения
}

int main() {
    int x = 5;
    doubleValue(&x);  // Передача адреса x
    // x теперь равен 10!
    return 0;
}

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

challenge icon

Задание

Легко

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

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

  1. Создать функцию с именем tripleValue, которая принимает указатель на целое число в качестве параметра
  2. Внутри функции tripleValue использовать оператор разыменования, чтобы умножить значение по адресу памяти на 3
  3. Внутри функции tripleValue вывести новое значение в формате: Value tripled to: [value]
  4. В функции main объявить целочисленную переменную с именем number и инициализировать ее значением 8
  5. Вывести исходное значение в формате: Original value: [value]
  6. Вызвать функцию tripleValue и передать адрес переменной number, используя оператор взятия адреса
  7. После вызова функции вывести конечное значение number в формате: Final value: [value]

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

Original value: 8
Value tripled to: 24
Final value: 24

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

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

#include <stdio.h>

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

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

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

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