Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 57

Так я поступал раньше, рассказывая о структурах. Теперь вместо ло­кального распределения используем динамическое:

mailingListRecord* listArray; listArray = new mailingListRecord; strcpy(listArray->firstName, "Ian"); strcpy(listArray->lastName, "Spencer"); // и т.д.

В первой строке объявляется указатель на структуру mailingListRecord. Следующая строка инициализирует этот указатель, динамически размещая новый экземпляр структуры mailingListRecord. Таким образом осуществля­ется динамическое создание и использование объектов в Си++.

Назад к нашей программе

Теперь вы видите, какую роль играют указатели. При динамическом создании объекта оператор new возвращает указатель на этот объект, разме­щенный в памяти. Указатель необходим вам для использования объекта. На рис. 3.1 показано, как указатель ссылается на объект в памяти. Обратите внимание, что несмотря на размещение объекта в динамической памяти, сам указатель является локальной переменной и находится в стеке.

1МЯТИ

Давайте вернемся к рассмотренному ранее фрагменту кода:

В третьей строке для доступа к члену firstName вместо оператора доступа (.) используется оператор косвенного доступа (->). (Оператор доступа к члену структуры рассматривался вчера в разделе «Структуры». Далее я буду на­зывать его оператором прямого доступа.) При динамическом создании объекта вы должны использовать для доступа к его членам оператор косвенного доступа.

Создание динамического массива структур выполняется немного сложнее. Вот пример размещения массива в стеке:

mailingListRecord listArray[3]; listArray[0].zip = 57441;

и динамического размещения:

mailingListRecord* listArray[3]; for (int i = 0; i < 3; i++)

listArray[i] = new mailingListRecord; listArray[0]->zip = 57441;

Web-дизайн (с) 2010 All rights reserved