Что такое указатели в программировании — Журнал «Код» программирование без снобизма
В программировании есть понятие указателей — особенно часто о них можно услышать в языках вроде C. Указатели считаются сложной темой, и про тех, кто ими пользуются, ходят легенды. Но на самом деле в указателях нет ничего сложного. Сейчас разберём.
Что такое указатель
Когда мы заводим новую переменную, компьютер выделяет для неё место в оперативной памяти:
Количество этих ячеек зависит от типа данных, который хранится в этой переменной: обычно для целого числа выделяют 2 или 4 байта, для дробного — 8 байт, для строки — столько же, сколько и символов и ещё 1 служебный байт и так далее. Но сколько бы байтов ни выделил компьютер для хранения, он выделяет эти байты подряд, друг за другом, и запоминает два момента:
- Сколько байтов занимает переменная.
- По какому адресу в памяти находится первый байт этой переменной.
Если совсем упростить, то адрес в памяти — это порядковый номер ячейки, где хранится байт. Так вот, в указателях как раз хранятся адреса памяти, где начинаются разные переменные:
Зачем это нужно
Указатели нужны для того, чтобы можно было напрямую работать с оперативной памятью. Например, указатели позволяют экономить выделение памяти: когда в функцию вместо переменной передаётся указатель, компьютер не создаёт её локальную копию, а обращается к ней напрямую.
Второе применение указателей — динамическое управление памятью. Если нам нужно выделить в памяти некоторую область для хранения своих данных, но стандартные переменные нам не подходят, мы можем использовать указатель. В этом случае мы помещаем в него стартовый адрес ячейки и говорим, сколько байтов после него нужно использовать и что в них положить.
Что такое сборщик мусора в программировании
Почему указателями редко пользуются
Если в указатель положить адрес памяти, который выходит за границы, выделенные для этой программы, то мы можем повредить чужие данные. Некоторые языки, например, C++, не всегда перепроверяют то, что делает программист, поэтому там легко сломать не только свою программу, но и весь компьютер.
Дело в том, что компьютеру всё равно, что лежит по адресу, написанному в указателе — данные, переменная или что-то чужое. Всё, что он делает — это идёт по этому адресу и стирает либо записывает туда что-то своё, не задавая лишних вопросов. Это мощная штука, но чтобы ей пользоваться, нужно чётко знать внутреннюю архитектуру памяти и работы компилятора.
В каких языках есть указатели
Самые популярные языки с поддержкой указателей — это всё семейство Си-языков:
А всё потому, что в старые времена оперативной памяти было мало и нужно было использовать её как можно эффективнее. Поэтому иногда было нормально, когда одна и та же область памяти использовалась программистом для хранения разных данных.
Также полноценные указатели есть в некоторых современных языках высокого уровня: Java, Pascal и Go.
Текст:
Михаил Полянин
Редактор:
Максим Ильяхов
Художник:
Алексей Сухов
Корректор:
Ирина Михеева
Вёрстка:
Кирилл Климентьев
Соцсети:
Виталий Вебер
Программирование для начинающих \ 16.
PInteger;Возможные значения такой переменной – адреса в памяти, где хранятся адреса, по которым записаны целые числа.
Среди возможных значений указателей выделяется одно особенное значение – nil. Указатель, имеющий значение nil, «никуда не указывает». Указатель nil, считается константой, которую можно присвоить указателю любого типа.
Следующий раздел:
Предыдущий раздел:
Добавить комментарий
указателей (C++) | Microsoft Узнайте
Обратная связь Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
-
- 2 минуты на чтение
Указатель — это переменная, в которой хранится адрес памяти объекта. Указатели широко используются как в C, так и в C++ для трех основных целей:0003
- для размещения новых объектов в куче,
- для передачи функций другим функциям
- для перебора элементов в массивах или других структурах данных.
В программировании в стиле C для всех этих сценариев используются необработанных указателей . Однако необработанные указатели являются источником многих серьезных ошибок программирования. Поэтому их использование настоятельно не рекомендуется, за исключением случаев, когда они обеспечивают значительный выигрыш в производительности и нет двусмысленности в отношении того, какой указатель является 9-м.0029 владеет указателем , отвечающим за удаление объекта. Современный C++ предоставляет интеллектуальных указателей для размещения объектов, итераторов для обхода структур данных и лямбда-выражений для передачи функций. Используя эти языковые и библиотечные средства вместо необработанных указателей, вы сделаете свою программу более безопасной, простой в отладке, понимании и сопровождении. Дополнительные сведения см. в разделе Интеллектуальные указатели, итераторы и лямбда-выражения.
В этом разделе
- Необработанные указатели
- Константные и энергозависимые указатели
- новые операторы и операторы удаления
- Умные указатели
- Как создать и использовать экземпляры unique_ptr
- Как создать и использовать экземпляры shared_ptr
- Как создать и использовать экземпляры weak_ptr
- Как создать и использовать экземпляры CComPtr и CComQIPtr
См. также
Итераторы
Лямбда-выражения
Обратная связь
Отправить и просмотреть отзыв для
Этот продукт Эта страница
Просмотреть все отзывы о странице
Программирование на C: указатели и управление памятью — 4
Об этом курсе
12 640 недавних просмотров
В этом курсе мы рассмотрим ключевую концепцию, лежащую в основе любого языка программирования: использование памяти.
В этом курсе вы также получите опыт работы с концепциями программирования, которые являются основополагающими для любого языка программирования. В конце этого курса вы достигнете четвертой вехи в программировании на C со специализацией Linux, открывая дверь к карьере в области компьютерной инженерии. Ваша работа — Программисты, разработчики, инженеры, менеджеры и смежные отрасли в области научных вычислений и науки о данных; — Встроенные системы, такие как транспорт, инженерные сети и аэрокосмическая промышленность; — Робототехника и производство; — IoT (Интернет вещей), используемый в умных домах, автоматизации и носимых устройствах. — IEEE, крупнейшая в мире техническая профессиональная организация по развитию технологий, поставила C на третье место среди языков программирования 2021 года, наиболее востребованных работодателями. (Источник: IEEE Spectrum) Этот курс получил финансовую поддержку от Фонда Патрика и Лины Драи.Гибкие сроки
Сброс сроков в соответствии с вашим графиком.
Совместно используемый сертификатСовместно используемый сертификат
Получите сертификат по завершении
100% онлайн100% онлайн
Начните сразу и учитесь по собственному графику.
СпециализацияКурс 4 из 7 в рамках специализации
Программирование на C в Linux
Начальный уровеньНачальный уровень
Мы рекомендуем пройти 3 первых курса программирования на C со специализацией Linux
Количество часов на выполнениеПрибл. 7 часов на выполнение
Доступные языкиАнглийский
Субтитры: английский
Чему вы научитесь
Визуализируйте концепцию указателя и используйте его для передачи переменных в функции по ссылке, чтобы изменить их через функцию
Применение арифметики указателей для адресации элементов как одномерных, так и многомерных массивов
Использовать массивы строк для хранения списков строк в одной переменной-массиве
Использование памяти управления путем динамического распределения и освобождения памяти во время выполнения
Навыки Вы получите
- Компьютерные программирование
- C программирование
Гибкие нагнетатели
Reset Leadlines в соответствии с Darsemance Deadlines.
Совместно используемый сертификатСовместно используемый сертификат
Получите сертификат по завершении
100% онлайн100% онлайн
Начните сразу и учитесь по собственному графику.
СпециализацияКурс 4 из 7 в рамках специализации
Программирование на C в Linux
Начальный уровеньНачальный уровень
Мы рекомендуем пройти 3 первых курса программирования на C со специализацией в Linux
Часов для прохожденияПрибл. 7 часов на выполнение
Доступные языкиАнглийский
Субтитры: английский
Инструкторы
Реми ШАРРОК
Доцент, Telecom Paris
6,323 Учащиеся
7 Курсы
Петра Бонферт-Тейлор
Профессор технических наук | Ассоциированный декан по разнообразию и включению
Инженерная школа Thayer
6 323 Ученики
7 Курсы
Предлагаемые
Dartmouth College 9018
. входит в число крупнейших академических учреждений мира. Дартмут создал уникальную идентичность, объединив свою глубокую приверженность выдающимся гуманитарным наукам и последипломному образованию с выдающимися исследованиями и стипендиями в области искусств и наук и его четырех ведущих аспирантур — Медицинской школы Гейзеля, Школы последипломного образования и повышения квалификации Гуарини. , Инженерная школа Тайера и Школа бизнеса Така.
Institut Mines-Télécom
Institut Mines-Télécom является государственным учреждением, занимающимся высшим образованием, исследованиями и инновациями в области инженерии и цифровых технологий.
Обзоры
4,5
Заполненные звезды StarFiled StarFiled Starhalf, заполненная звезда8 Обзоры
5 звезд
84.61%
2 звезды
15.38%
2 Звезды
15.38%
2 Звезды
15.38%
2 Звезды
15.38%
. УПРАВЛЕНИЕ — 4 Заполненная Звезда Заполненная Звезда Заполненная Звезда Заполненная Звезда
от PP 25 июля 2022 г.
Указатели (снова) и malloc/free. Очень хорошо объяснил. Кодкаст очень помогает.
Заполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаот RS 9 июля 2022 г.
Как всегда для предыдущих курсов специализации, Awesomeeeeeee!
Заполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаЗаполненная звездаby MK3 ноября 2022 г.
Упражнения должны быть немного сложнее и жестче, чтобы учащийся мог в совершенстве усвоить концепции.
Отличный курс . Спасибо
Просмотреть все отзывы
О специализации «Программирование на C в Linux»
В этой программе специализации C Programming with Linux, состоящей из семи коротких курсов, вы научитесь писать, читать и отлаживать компьютерные программы на языке программирования C, а также познакомитесь с операционной системой Linux.