Кент Рейсдорф. 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;