Стефан Дэвис - С++ для чайников .

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: sci_tech, издательство Издательский дом Вильямс. Компьютерное издательство Диалектика, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    С++ для чайников .
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс. Компьютерное издательство Диалектика
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    0-7645-6852-3, 978-5-8459-0723-3
  • Рейтинг:
    4/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Стефан Дэвис - С++ для чайников . краткое содержание

С++ для чайников . - описание и краткое содержание, автор Стефан Дэвис, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
empty-line
1
empty-line
4

С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)

С++ для чайников . - читать книгу онлайн бесплатно, автор Стефан Дэвис
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

sizeof a char = 1

sizeof an int = 4

sizeof a long = 4

sizeof a float = 4

sizeof a double= 8

Press any key to continue...

He удивляйтесь если при использовании другого компилятора вы получите другие - фото 124

«He удивляйтесь, если при использовании другого компилятора вы получите другие результаты. Например, может оказаться, что размерint меньше размераlong . Стандарт С++ не оговаривает точные значения размера тех или иных типов — он говорит только о том, что размер типаint не превышает размераlong , а размерdouble не может быть меньше размераfloat . Размеры, приведённые выше, типичны для 32-битовых процессоров ( типа Pentium ).»

[ Советы ]

►Что такое адрес...106

Очевидно, что каждая переменная С++ расположена где-то в памяти компьютера. Память разбита на байты, каждый из которых имеет свой адрес — 0, 1, 2 и т.д.

Переменная intRandy может находиться по адресу 0x100 , a floatReader — по адресу 0x180 ( адреса в памяти принято записывать в шестнадцатеричном виде ). Понятно, что эти переменные могут находиться где угодно, и только компьютер по долгу службы точно знает, где именно они располагаются — и то только в процессе выполнения программы.

Здесь можно провести определённую аналогию с отелем. Когда вы бронируете место, вам может быть предоставлен, например, номер 0x100 ( я понимаю, что номера в отеле никто не записывает в шестнадцатеричной форме, но отвлечёмся на минуту от этого факта ). Ваш друг при бронировании может оказаться в номере 0х180 — так и каждая переменная получает место в памяти при создании ( немного подробнее об этом будет рассказано далее, когда мы будем рассматривать область видимости ).

►Адресные операторы...106

В табл. 8.1 приведены два оператора, связанные с указателями. Оператор &по сути говорит "скажи мне номер комнаты в отеле", а *— "кто в этой комнате живёт".

_________________

106 стр. Часть 2. Становимся функциональными программистами

Таблица 8.1. Адресные операторы

_________________

Оператор — Описание

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

&— ( унарный ) Адрес

*— ( унарный ) ( В выражении ) то, на что указывает указатель

*— ( унарный ) ( В объявлении ) указатель на

¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Следующая программа демонстрирует использование оператора & и показывает расположение переменных в памяти.

/* Layout — демонстрация расположения переменных в памяти компьютера */

#include

#include

#include

using namespace std ;

int main( int nNumberofArgs , char* pszArgs[ ] )

{

int end ;

int n ;

long l ;

float f ;

double d ;

/* Вывод в шестнадцатеричном формате */

cout.setf( ios::hex ) ;

cout.unsetf( ios::dec ) ;

/* Вывод адресов каждой из переменных. Обратите внимание на расположение переменных в памяти компьютера */

cout << "--- = " << &end << " \n" ;

cout << " &n = " << &n <<" \n" ;

cout << " &l = " << &l <<" \n" ;

cout << " &f = " << &f <<" \n" ;

cout << " &d = " << &d <<" \n" ;

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ; return 0 ;

}

Программа объявляет ряд переменных, к которым затем применяется оператор &для того, чтобы получить их местоположение в памяти. Вот как выглядит результат выполнения этой программы, скомпилированной Dev-C++.

0x28ff34 n 0x28ff30 l 0x28ff2c f 0x28ff28 d - фото 125

--- = 0x28ff34

&n = 0x28ff30

&l = 0x28ff2c

&f = 0x28ff28

&d = 0x28ff20

Press any key to continue...

_________________

107 стр. Глава 8. Первое знакомство с указателями в С++

Результат выполнения программы на вашем компьютере может отличаться от - фото 126

«Результат выполнения программы на вашем компьютере может отличаться от приведённого. Абсолютные адреса переменных зависят от массы различных факторов. Вообще говоря, результаты могут отличаться при различных запусках одной и той же программы.»

[ Советы ]

Обратите внимание на то, что переменная n располагается ровно в 4 байтах от первой объявленной переменной end . Переменная l располагается ещё на 4 байта ниже, а переменная типа double занимает 8 байт. Для каждой переменной выделяется память, необходимая для её типа.

Стандарт С не требует от компилятора последовательного беспросветного - фото 127

«Стандарт С++ не требует от компилятора последовательного "беспросветного" размещения переменных в памяти. Dev-C++ может разместить переменные в памяти и по-другому.»

[ Атас! ]

►Использование указателей...108

Переменная-указатель содержит адрес, обычно это адрес другой переменной. Используя аналогию с отелем: я могу сказать сыну, что во время путешествия я буду в комнате 0x100. Мой сын выполняет роль указателя — его можно спросить, в какой комнате отеля я нахожусь, и он даст точный ответ.

Вот псевдокод, описывающий данную ситуацию:

mySon = & DadsRoom ; /* Теперь сын знает комнату отца */

room = *mySon ; /* "Номер комнаты равен" */

Пример работы с операторами на С++ привёден в следующем листинге:

void fn( )

{

int intVar ;

int* pintVar ;

pintVar = & intVar ; /* Теперь pintVar указывает на intVar */

*pintVar =10 ; /* Сохраняет 10 в переменной типа int по адресу, находящемуся в pintVar */

}

Функция fn( ) начинается с объявления переменной intVar ; в следующей строке объявляется pintVar — указатель на переменную типа int .

Указатели объявляются как обычные переменные, но в объявление добавляется унарный оператор * , который может быть использован совместно с именем любого типа. В данной строке этот символ используется вместе с именем фундаментального типа int . Однако этот оператор может использоваться для добавления к любому имени переменной типа.

При написании программ желательно придерживаться соглашений об именах, в соответствии с которыми первый символ в названии переменной указывает на её тип. Например, можно использовать n для int , d для double и т.д. С учётом этого соглашения имена указателей далее в книге будут начинаться с буквы р .

Унарный оператор &в выражении означает "взять адрес переменной". Таким образом, в первой строке приведённого кода находится команда сохранения адреса переменной intVar в переменной pintVar .

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стефан Дэвис читать все книги автора по порядку

Стефан Дэвис - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




С++ для чайников . отзывы


Отзывы читателей о книге С++ для чайников ., автор: Стефан Дэвис. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x