Оператор взятия адреса (&)
Часть раздела Логика и управление потоком путешествия по 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]Фактические адреса памяти будут различаться при каждом запуске программы, но формат и метки должны в точности соответствовать приведённым выше. [address] — это заполнитель для выведенного адреса: не выводите квадратные скобки.
Попробуйте сами
#include <stdio.h>
int main() {
// TODO: Напишите ваш код здесь
// 1. Объявите и инициализируйте переменные
// 2. Объявите указатели
// 3. Используйте оператор взятия адреса для присвоения адресов
// 4. Выведите адреса, используя указанный формат
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функцииПотренируйтесь самостоятельно: Онлайн-компилятор C