Главная » Просмотр файлов » Г. Шилдт - С# 3.0 Полное руководство. 2010

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 127

Файл №1160798 Г. Шилдт - С# 3.0 Полное руководство. 2010 (Г. Шилдт - С# 3.0 Полное руководство. 2010) 127 страницаГ. Шилдт - С# 3.0 Полное руководство. 2010 (1160798) страница 1272019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Поэтому в приведенных выше примерах переменная 1р может служить для указания на значение типа 1пс, а переменная гр — для указания на значение типа 11оас. Следует, однако, иметь в виду, что указателю ничто не мешает указывать на что угодно. Именно поэтому указатели потенциально небезопасны. Если у вас есть опыт программирования на С/Сч-ь, то вы должны ясно понимать главное отличие в объявлении указателей в С№ и С/С++. При объявлении указателя в С/Сч-ь знак * ле разделяет список переменных в обьявлении. Поэтому в следующей строке кода гггк* р, Чг объявляется указатель р типа 1пс и переменная гг типа 1пс.

Это равнозначно двум сле- дующим объявлениям: 1пс* рг ьпг ст; А в С№ знак * лвляетсл разделительным, и поэтому в объявлении гпк* р, гтт создаются две переменные-указателя. Это равнозначно двум следующим объявлениям: 1пк* р: гпс* Чт Это главное отличие следует иметь в виду, при переносе кода С/Сч-+ в С№.

Операторы *и а а указателях В указателях применяются два оператора: * и в. Оператор в является унарным и возвращает адрес памяти своего операнда. (Напомним, что для унарного оператора требуется единственный операнд.) Например, в следующем фрагменте кода: дпк* гр; гпк пав = 10г 1р = впивг в переменной 1р сохраняется адрес памяти переменной пцв. Это адрес расположения переменной пцв в оперативной памяти компьютера Он не имеет никакого отношения к значению переменной гплп. Поэтому в переменной 1р содержится не значение 10, являющееся исходным для переменной пшп, а конкретный адрес, по которому эта переменная хранится в оперативной памяти.

Операцию а можно рассматривать как возврат адреса той переменной, перед которой она указывается. Таким образом, приведенное выше присваивание словами можно описать так: "Переменная 1р получает адрес переменной гплп." Второй оператор, *, является дополнением оператора а. Этот унарный оператор находит значение переменной, расположенной по адресу, на который указывает его операнд. Сйедовательно, этот оператор обрщцается к значению переменной, на которую указывает соответствующий указатель. Так, если переменная 1р содержит адрес памяти переменной пшп, как показано в предыдущем примере, то в следующей строке кода: 1пс ча1 = *1рг 660 часть!. язык с» в переменной ча1 сохраняется значение 10 переменной ппю, на которую указывает переменная 1р. Операцию * можно рассматривать как получение значения по адресу.

Поэтому приведенный выше оператор присваивания описывается словами следующим образом: "Переменная ча1 получает значение по адресу в переменной 1р." Оператор * можно использовать также в левой части оператора присваивания. В этом случае он задает значение, на которое указывает соответствующий указатель, как в приведенном ниже примере. *1р = 100/ В данном примере значение 100 присваивается переменной, на которую указывает переменная 1р, т.е. переменной пппь Поэтому приведенный выше оператор присваивания описывается словами следующим образом: "Разместить значение (00 по адресу в переменной 1р." Применение ключевого слова иавайе Любой код, в котором используются указатели, должен быть помечен как небезопасный с помощью специального ключевого слова ппзаке.

Подобным образом можно пометить конкретные типы данных (например, классы и структуры), члены класса (в том числе методы и операторы) или отдельные кодовые блоки как небезопасные. В качестве примера ниже приведена программа, где указатели используются в методе махп (), помеченного как небезопасный. // Продемонстрировать применение указателей и // ключевого слова опзате. чв1пд Зувкеют с1азв ппвагеообе ( // Пометить метод Макк Мати как небезопасный. ппвате зкактс чо1Й Маап() ( апс соипк = 999 тик* рт // создать указатель типа тпк р = асочпк; // поместить адрес переменной сосок в переменной р Сопзо1е.иг1кевэпе("Исходное значение переменной сосок: " т *р)т *р = 10; // присвоить значение 10 переменной сочно, // на которую указывает переменная р Сопво1е.иг1кесзпе("Новое значение переменной сопок: " + *р) ) 1 Эта программа дает следующий результат: Исходное значение переменной сосок: 99 Новое значение переменной соипкк 10 Глава 20. Небезопасный код, указатели, обнуллеыые типы и разные ключевые слова 661 Применение модификатора Кахети В работе с указателями нередко используется модификатор б1хеб, который препятствует удалению управляемой переменной средствами "сборки мусора".

Потребность в этом возникает, например, в том случае, если указатель обращается к полю в объекте определенного класса А поскольку указателю ничего не известно о действиях системы "сборки мусора", то он будет указывать не на тот объект, если удалить нужный объект. Ниже приведена общая форма модификатора бфхеб. Льхеб (тип* р = Вфиксиронанньи~ объект) ( // использовать фиксирозанньпв объект где р обозначает указатель, которому присваивается адрес объекта. Этот объект будет оставаться на своем текущем месте в памяти до конца выполнения кодового блока. В качестве адресата оператора Г1хеб может быть также указано единственное выражение, а не целый кодовый блок. Модификатор 11хес( допускается использовать только в коде, помеченном как небезопасный. Кроме того, несколько указателей с модификатором 11хек( могут быть объявлены списком через запятую.

Ниже приведен пример применения модификатора 11хеб. // Продемонстрировать применение оператора Гзхеб. пз1пч зузоещт с1ааз тевк ( роь11с 1пк пщлт рпо11с тевс(ьпк 1) ( ппщ = зт ) ) с1ааа УьхебСобе ( // Пометить метод Маьп() как небезопасный. ппзаве зкас1с чоыф Ма1п() ( теис о = лен тезс(19)т Е1хеб (ьпк* р = Во.пощ) ( // использовать // модификатор Г1хеб для размещения адреса // переменной экземпляр о.ппщ з переменной р Сопао1е.ыт1кетьпе("Исходное значение переменной о.ппщ: " + *р) *р = 10т // присвоить значение 10 переменной // сопок, на которую указывает переменная р Сопао1е.ытзкеъфпе("Новое значение переменной о.ппщ: " + *р) Вот к какому результату приводит выполнение этой программы: Исходное значение переменной о.ппщ: 19 Новое значение переменной о.ппщ: 10 662 часть).

язык сэ В данном примере модификатор гухеб препятствует удалению объекта о. А поскольку переменная р указывает иа переменную экземпляра о. пппь то оиа будет указывать иа неверную область памяти, если удалить объект о. Доступ к членам структуры с помощью указателя Указатель может указывать иа обьект типа структуры при условии, что структура ие содержит ссылочиые типы данных.

Для доступа к члену структуры с помощью указателя следует использовать оператор-стрелку (->), а ие оператор-точку (.). Например, доступ к членам структуры акгосс Му5кгпск ( риь11с ьпс а; ропъъо ъпс Ь; рпЬ11с 1пк япи() ( геспгп а т Ь; ) ) осуществляется следующим образом: МуЯГгоск о = пен Му5кгоок(); МуЯГгосг* рк // объявить указатель р = ао; р->а = 10; // использовать оператор -> р->Ь = 20) // использовать оператор -> сопао1е.игъгеььпе("сумма равна " ь р->яои())к Арифметические операции над указателями Над указателями можно выполнять только четыре арифметические операции: +~-, —, + и —.

Для того чтобы стало понятнее, что именно происходит в арифметических операциях иад указателями, рассмотрим сначала простой пример. Допустим, что переменная р1 является указателем с текущим значением 2000, т.е. опа содержит адрес 2000. После выполнения выражения ргн-к переменная р1 будет содержать значение 2004, а ие 2001! Дело в том, что после каждого иикремеитироваиия переменная р1 указывает иа следующее значение типа гпс. А поскольку тип 1пс представлен в С(Г 4 байтами, то в результате иикремеитироваиия зиачеиие переменной р1 увеличивается иа 4.

Справедливо и обратное: при каждом декремеитироваиии переменной р1 ее значение уменьшается иа 4. Например выражение р1--; приводит к тому, что значение переменной р1 становится равным 1996, если раньше оио было равно 2000! Все сказанное выше можно обобщить: после каждого иикремеитирования указатель будет указывать иа область памяти, где хранится следующий элемент его соотиосимого типа, а после каждого декремеитироваиия указатель будет указывать иа область памяти, где хранится предыдущий элемеит его соотиосимого типа. Глава 20.

Небезопасный код, указатели, обнуппемые типы и разные ключевые слова 663 Арифметические операции изд указателями ие ограничиваются только иикремеитироваиием и декремеитироваиием. К указателям можно добавлять и вычитать из иих целые значения. Так, после вычисления следующего выражения: р1 = р1 + 94 переменная р1 будет указывать иа девятый элемент ее соотиосимого типа по отношению к элементу, иа который оиа указывает в настоящий момент. Если складывать указатели нельзя, то разрешается вычитать один указатель из другого, при условии, что оба указателя имеют один и тот же соотиосимый тип. Результатом такой операции окажется количество элементов соотиосимого типа, которые разделяют оба указателя.

Кроме сложения и вычитания целого числа из указателя, а также вычитания двух указателей, другие арифметические операции иад указателями ие разрешаются. В частности, к указателям нельзя добавлять или вычитать из иих значения типа 11оак или с)оцЫе. Для того чтобы проверить иа практике результаты арифметических операций иад указателями, выполните приведенную ниже короткую программу, где выводятся физические адреса, иа которые указывает целочисленный указатель 11р) и указатель с плавающей точкой одинарной точности (бр). Понаблюдайте за изменениями каждого из этих указателей по отношению к их соотиосимым типам иа каждом шаге цикла. // Продемонстрировать результаты арифметических операций над указателями. цвгпз Яуясеит с1авв Ркяак1кппеио ( цпяаге всас1с чо14( ма1п() ( 1пк хт 1пс 17 т(оцые От ' 1пс* гр = 414 к(оцЫе* гр = вст Сопяо1е.ыягсеьзпе("1пс т(оцЫе1п")," Гог(х=04 х < 10; х++) ( Сопво1е.иг1кевдпе((ц1пс) (1р) (цгпк) (Гр))т 1р++) бр++к Ниже приведен примерный результат выполнения данной программы.

У вас ои может оказаться иным, хотя промежутки между выводимыми значения должны быть такими же самыми. 1пк т(оные 1243464 1243468 1243468 1243476 1243472 1243484 1243476 1243492 664 часть ). язык сз 1243480 1243500 1243484 1243508 1243488 1243518 1243492 1243524 1243496 1243532 1243500 1243540 Как следует из приведенного выше результата, арифметические операции выполняются над указателями относительно их соотносимого типа. Так, значения типа 1пг занимают в памяти 4 байта, а значения типа г)ои)>1е — 8 байтов, и поэтому их адреса изменяются с приращением именно на эти величины. Сравнение указателей Указатели можно сравнивать с помощью таких операторов отношения, как ==, < и >.

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее