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

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

_________________

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

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

    _________________

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

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

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

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

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

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

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

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

    #include <cstdio>

    #include <cstdlib>

    #include <iostream>

    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 << " " ;

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

        cout << "&l  = " << &l <<" " ;

        cout << "&f  = " << &f <<" " ;

        cout << "&d  = " << &d <<" " ;

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

        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++ может разместить переменные в памяти и по-другому.»

[Атас!]