Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
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 удивляйтесь, если при использовании другого компилятора вы получите другие результаты. Например, может оказаться, что размер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 = 0x28ff20
Press any key to continue...
_________________
107 стр. Глава 8. Первое знакомство с указателями в С++
«Результат выполнения программы на вашем компьютере может отличаться от приведённого. Абсолютные адреса переменных зависят от массы различных факторов. Вообще говоря, результаты могут отличаться при различных запусках одной и той же программы.»
[ Советы ]
Обратите внимание на то, что переменная n располагается ровно в 4 байтах от первой объявленной переменной end . Переменная l располагается ещё на 4 байта ниже, а переменная типа double занимает 8 байт. Для каждой переменной выделяется память, необходимая для её типа.
«Стандарт С++ не требует от компилятора последовательного "беспросветного" размещения переменных в памяти. 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 .
Читать дальшеИнтервал:
Закладка: