Объявление указателей
Часть раздела Logic & Flow путешествия по C на Coddy — урок 2 из 63.
Теперь, когда вы понимаете, что такое pointers, давайте научимся их создавать. Объявление переменной pointer следует определенному синтаксису, который указывает компилятору, на какой тип данных будет указывать pointer.
Базовый синтаксис для объявления pointer: data_type *pointer_name;
int *ptr; // Объявляет указатель на целое число
char *ch_ptr; // Объявляет указатель на символ
float *f_ptr; // Объявляет указатель на число с плавающей точкойСимвол звездочки (*) — это то, что делает объявление объявлением pointer. Он сообщает компилятору, что эта переменная будет хранить address памяти, а не фактическое значение данных. Когда вы объявляете int *ptr;, вы говорите: «ptr — это pointer, который может хранить address переменной типа integer».
Хорошая практика — инициализировать указатели значением NULL, если они еще не указывают на допустимый адрес памяти. Это предотвращает их обращение к случайным областям памяти: int *ptr = NULL;
При выводе адресов указателей с помощью printf используйте спецификатор формата %p. Часто рекомендуется приводить указатель к типу (void *) для обеспечения совместимости и правильного форматирования: printf("%p", (void *)ptr);
Обратите внимание, что тип данных перед звездочкой указывает, на какой тип данных будет указывать pointer. Это важно, поскольку разные типы данных занимают разный объем памяти, и компилятору необходима эта информация для правильного управления памятью.
Задание
Легко- Объявить указатель на
intс именемint_ptr, инициализированный значениемNULL - Объявить указатель на
charс именемchar_ptr, инициализированный значениемNULL - Объявить указатель на
floatс именемfloat_ptr, инициализированный значениемNULL - Вывести адреса памяти, хранящиеся в каждом указателе, используя
printfсо спецификатором формата%p. При выводе приведите указатель к типу(void*)для обеспечения правильного форматирования, например:printf("Label: %p\n", (void*)ptr);
Ваш вывод должен отображать три адреса указателей в следующем формате:
Integer pointer: [address]
Character pointer: [address]
Float pointer: [address]Обратите внимание, что фактические адреса памяти будут отличаться, но формат и метки должны точно соответствовать показанным выше.
Попробуйте сами
#include <stdio.h>
int main() {
// TODO: Объявите ваши указатели здесь
// TODO: Выведите адреса указателей, используя требуемый формат
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции