Menu
Coddy logo textTech

Передача указателей в функции

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

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

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

void processValue(int *ptr) {
    // ptr содержит адрес исходной переменной
    // Теперь функция может получить доступ к этой области памяти
}

int main() {
    int x = 10;
    processValue(&x);  // Передаем адрес x
    return 0;
}

Обратите внимание, как мы используем оператор взятия адреса & при вызове функции для передачи адреса переменной. Параметр функции объявлен как int *ptr, что указывает на ожидание получения указателя на целое число. Эта фундаментальная техника открывает широкие возможности для взаимодействия функций с данными вашей программы.

challenge icon

Задание

Легко

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

  1. Создать функцию с именем displayValue, которая принимает указатель на целое число в качестве параметра
  2. Внутри функции displayValue использовать оператор разыменования для доступа к значению по адресу памяти и вывести его в формате: Value at address: [value]
  3. В функции main объявить целочисленную переменную с именем number и инициализировать её значением 42
  4. Вывести исходное значение в формате: Original value: [value]
  5. Вызвать функцию displayValue и передать адрес переменной number, используя оператор взятия адреса
  6. После вызова функции вывести подтверждающее сообщение: Function call completed

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

Original value: 42
Value at address: 42
Function call completed

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

Шпаргалка

При передаче указателей в функции функция получает доступ к адресу памяти исходной переменной вместо копии её значения.

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

void processValue(int *ptr) {
    // ptr содержит адрес исходной переменной
    // Теперь функция может получить доступ к этой области памяти
}

int main() {
    int x = 10;
    processValue(&x);  // Передаем адрес x
    return 0;
}

Параметр функции объявлен как int *ptr, чтобы указать, что она ожидает получения указателя на целое число.

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

#include <stdio.h>

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

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

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

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