Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 29

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 29 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 292019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 29)

Указатели — ноль — массивы — строковые литералы — указатели на массивы константы — указатели и константы — ссылки — иоЫ" — структуры данных— советы — упражнения. 5.1. Укаэатели Для данно~о типа Т тип Т* является «указателем на Т». То есть переменная типа Т * содержит адрес объекта типа Т. Например; с1гаг с = 'а'; с1гаг" р = 8.е; // р содерлсипг адрес с или графически: К сожалению, запись указателей на массивы и функции сложнее: Объяснение синтаксиса объявлений см. в 9 4.9.1, а полное изложение грамматики см. в приложении А.

Основной операцией над указателями является разылгенование, то есть получение объекта, на который указывает указатель, Эта операция называется также косвенны.ч обращениелс Оператором разымснования является (префиксный) унарный *. Например: гп1 рй еЬаг"' рре; го 1" ар(15]; 1п1 РТр)(с1гаг'~; 1п1' Яс1гаг'~; Указатели, массивы и структуры Великое и смешное часто так тесно переплетены друг с другом, что ик бывиет трудно отличить. — Том Пэйн // указате«ь нп гпг // указатель но указапгель на сна г //массив из 15 указателей на т1 // указатель на 4ункиию с аргуменпгом сггаг ", возвраи1аюи1 ую т1 //г/гункиия с аргул~ентоя сваг', // возвращающая указатель на 1пг Глава 5.

Указатели, массивы и структуры 126 сбаг с = 'а', сбаг'р= Зс, сбагс2="р, О содержио~ адрес перел~виной с лл! с2=='а' ! 1еремепной, на которую указывает р, является с, а значением, хранимым в с, является 'а', поэтому значение *р (прпсваиваемое с2) равно 'а'. Над указателями на элементы массивы можно выполнять некоторые арифметические операции (6 5.3). Указатели на функции могут быть исклю штельно полезны; они обсуждаются в 2 7.7. Указатели задуманы с целью непосредственного отражения механизмов адресации компьютеров, па которых исполняются программы. Большинство компьютеров может адресовать баит.

Те, которые нс могут, все равно так нли иначе умеют извлекать байты из слов. С другой стороны, очень немногие ма|нины могут непосредственно обращаться к битам. Следовательно, наименьшим объектом, который можно независимо разместить и на который можно независимо указать с помощью встроенных типов, является сбаг. Обратите внимание, что тнп боо! занимает по меньшей мере столько же памяти, что и сбаг Я 4.6). Для более компактного хранения малых (по объему) величин можно воспользоваться логическпмп операциями Я 6.2.4) или битовыми полями в структурах Я В.8.1). 5.1.1. Ноль сопвс !пГЛ ШХ = О, Модификатор сопя! Я 5.4) предотвращает ненамеренное замещение ЛГШХ и гаран- тирует, что ЛГ«7Х можно использовать везде, где требуется константа.

5.2. Массивы Для данного типа Т, Т[в(ае~! есть тнп «массив из в[ее элементов типа Тео Элементы нумеруются (индексируются) от Ода в!ее — 1. Например: Яоас о[3~, лл) лгисснв нз трех элементов с иливиюнлейточкой; о[01, о[!), в[2) сбаг'а[З2), ллулиссив из З2 указателей ни слож а[01. а[З!! Колпчество элементов массива (размер массива) должно быть константным выраже- нием ([) В.5). Если вам потребуется менять размер массива, воспользуйтесь типом оесеог Я 3.7.1, 2 16.3). Например: Ноль (О) имеет тип !пб Благодаря стандартным преобразованиям Я В.6.2.3).

О можно использовать в качестве константы любого интегрального типа Я 4,1.1), типа с плавающей точкой, указателя или указателя на член класса. Тип нуля определяется по контексту. Ноль, как правило (но не всегда), будет физически представлен в виде последовательности нулевых битов соответствующей длины, Гарантируется, что нет объектов с нулевым адресом. Следовательно, указате.лгн равный нулю, можно интерпретировать как указатель, который ни на что не ссылается. Вл языке С было очень популярно определять макрос ЛФИ. для представления такого нулевого указателя. Так как в Съъ типы проверяются более жестко. использование банального пуля вместо ЛЮБЕ приведет к меньшим проблемам. Гели вы чувствуеэ с, что просто обязаны определить Л77И., воспользуйтесь 129 5.2. Массивы ооЫЯсп11) ( игги1[с]; //осиибкас розмермассспа неяаляеспся // конгтантнылс выражением // правильно иес1огк!п1> и2 (1), Многомерные массивы описываются как массивы массивов.

Например: спгс(2[10][20]; //42 является лшссиволс из 10 лсассивов по 20 целых Запись индексов через запятую, используемая в других языках, приведет к ошибке на этапе компиляпгш, потому что запятая является разделителем в последовательности (9 6.2.2) и не допускается в константных выражениях (9 В.5). Можете попробовать, например: // ошибка: занятия запреи(ена в конспютпных выраженссях т1 Ьа с1,5, 2], Мггогоьсерньгемассггвьгоггггсаныв9 В7.Вкодевысокогоуровняихлучшевообщензбегать. 5.2.1. Инициатгизаторы массивов Начальное значение массиву молсно присвоить, указав список значений. Например: т1 о1[] =(1,2, 3,4), сдаг о2гс] = ( 'а', 'Ь', 'с', О ), Когда массив объявлен без указания размера, но при этом иницналнзирован списком, его размер вычисляется путем подсчета числа элементов этого списка, Следовательно, п1 и п2 являются массивами сп1[4] н айаг[4] соответственно.

Если размер явно указан, задание большего числа элементов в списке инициализации будет ошибкой. Наг!ример; сдаг о3[2] = ('а', 'Ь', О ); // ошибка; слшико и лсного элементов сдпг и4[3] = ( 'а', 'Ь', 0); // правильно Если в списке элементов нннцпалпзацгии недостает элементов, всем остальным эле- ментам массива присваивается значение О. Например: сп1 об[8] = (1,2,3,4); равнозначно сп1об[] = (1,2, 3, 4,0,0, 0,0), Обратите внимание, что не существует присваивания массиву, соответствующего описанному выше способу инициализации: иоЫ1 () и4 = ( 'с', 'с1', О ); // ошабксгс такое присваивание мосситг не допрспшлсо Если вам нужно подобное присваивание, воспользуйтесь типом оес1ог (9 16.9) или оа(аггаи (9 22А).

Массив символов удобно иницизлнзировать строковым литералом (9 5.2.2). Глава 5. указатели, массивы и структуры 130 5.2.2. Строковые литералы "Э>по е>прока" В строковом литерале на один символ больше, чем используется прп заг>иси: он все- гда заканчивается нулевым символом '>>О', значение которого равно О.

Например; в>геок'Бор'~ == 4 Тип строкового литерала есть «массив с надлежащим количеством константных символов»; такпл> ооразом "Бор" принадлежит типу соплу сйаг14) Строковый литерал можно присвоить переменной типа сйаг*. Это разрен>ается, потому что в предыдущих определениях С и Сн-.ь типом строкового литерала был сваг*. Благодаря такому разрешению миллионы строк кода на С и С ьч остаются синтаксически корректнымп. Однако изменение строкового литерала через такой указатель является ошпбкои; оо1дД ( с1>аг*р = ))латов', р>4» = 'е'; >>1' птибкп: прпгвппвпние конг>пинте., 11 резвльтп>и неопределен Такого рода ов>ибкп, как правило, нс могут быль выявлены до выполнения программы ~см. также Г> В.2.3). Кроме того, различные реализации по-разному относятся к нарушению этого правила.

То, что строковые литералы являются константами, не только является очевидным, но и позволяет при реализации произвести значительную ошгимизацпю методов хранения и доступа к строковым литералам. Если нам нужна строка, которую мы гарантировано сможем модифицировать, следует скопировать символы в массив: ио1дЯ с1>агрД ='Зенон"; равд) = 'к', 0 р — люси>в из и>ес>пи и>птол он >> 1>' привольно Память под строковые литералы выделяется статически, поэтому пх свободно мож- но возвращать в качестве значения функции. Например: сопв1 сваг* еггог тепловое >1п1 1~ ( 0" ге1иго "выход за пределы диапазона', Память, содержащая строку "выход за пределы диапазона", не будет освоболгдена после вызова функции егтог н>евваяе й. Будут лп одинаковые строковые литераль> записываться в одно место памяти или нет, зависит от реализации Я В,1).

Например: Строковым литерплол> называется последовательность символов, заключенная в двойные кавычки: 5.3. указатели на массивы сопз1 саар р - -Гераклит', сопзг саас' д = "Гераклтп", ооЫОЕ ( 1У ~р==д~ соиг « 'в одном местег,п; // результат зависит от //конкретной реализации Обратите внимание, что р==О сравнивает адреса (значения указателей), а не значения, на которые они указывают. Пустая строка записывается в виде пары соседних двойных кавычек "" (и имеет тип сопв1 сйаг(1]). Форма записи специальных символов с обратной косой чертой (~) Я В3.2) может использоваться и в строках.

Характеристики

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6358
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее