Оператор взятия адреса (&)
Часть раздела Logic & Flow путешествия по C на Coddy — урок 3 из 63.
Теперь, когда вы умеете объявлять указатели, вам нужно научиться сохранять в них адрес памяти. Оператор взятия адреса (&) — это ключ к получению адреса памяти любой переменной.
Когда вы помещаете оператор & перед именем переменной, он возвращает адрес памяти, по которому хранится эта переменная. Представьте это как вопрос: «Где эта переменная находится в памяти?»
int age = 25;
int *ptr;
ptr = &age; // Сохраняем адрес 'age' в 'ptr'В этом примере &age дает нам адрес памяти переменной age. Затем мы присваиваем этот адрес нашему указателю ptr. Теперь ptr «указывает на» переменную age.
Оператор взятия адреса необходим, так как он является связующим звеном между обычными переменными и указателями. Без него вы не смогли бы указать указателю, на какую переменную он должен ссылаться. Помните, что типы данных должны совпадать — вы можете присвоить адрес целого числа только указателю, объявленному для целых чисел.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует использование оператора взятия адреса для связывания переменных с указателями. Ваша программа должна:
- Объявить целочисленную переменную с именем
numberи инициализировать ее значением 42 - Объявить символьную переменную с именем
letterи инициализировать ее значением 'X' - Объявить указатель на целое число с именем
num_ptr - Объявить указатель на символ с именем
char_ptr - Использовать оператор взятия адреса для присвоения адреса
numberуказателюnum_ptr - Использовать оператор взятия адреса для присвоения адреса
letterуказателюchar_ptr - Вывести адреса, хранящиеся в обоих указателях, используя
printfсо спецификатором формата%p
Ваш вывод должен отображать адреса указателей в следующем формате:
Address of number: [address]
Address of letter: [address]Фактические адреса памяти будут меняться при каждом запуске программы, но формат и метки должны в точности соответствовать показанным выше.
Шпаргалка
Оператор взятия адреса (&) возвращает адрес переменной в памяти:
int age = 25;
int *ptr;
ptr = &age; // Сохраняем адрес 'age' в 'ptr'Оператор взятия адреса необходим для связывания переменных с указателями. Типы данных должны совпадать — вы можете присвоить адрес целого числа только указателю, объявленному для целых чисел.
Используйте спецификатор формата %p для вывода адресов указателей с помощью printf.
Попробуйте сами
#include <stdio.h>
int main() {
// TODO: Напишите свой код здесь
// 1. Объявите и инициализируйте переменные
// 2. Объявите указатели
// 3. Используйте оператор взятия адреса для присвоения адресов
// 4. Выведите адреса, используя показанный формат
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции