Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 63
void IncrementPosition(int* xPos, int* yPos) {
*xPos++; // разыменование, затем увеличение *yPos++;
Обратите внимание, что указатель необходимо разыменовать перед увеличением значения переменной. В большинстве ситуаций передача по ссылке будет лучшим решением стоящей перед вами задачи, но в отдельных случаях без указателей обойтись трудно. При передаче массива типа char вместо ссылки обычно используется указатель, т.к. он взаимозаменяем с именем массива. В данном случае указатель оказывается удобнее, чем ссылка.
До этого момента я рассказывал главным образом о тех элементах Си++, которые пришли из Си. Теперь мы будем рассматривать возможности, присущие только Си++. Два оператора, new и delete, играют в Си++ очень важную роль.
Как упоминалось в предыдущем разделе, динамическое распределение памяти в программах на Си++ осуществляется оператором new. Для освобождения памяти используется оператор delete. Даже если вы программировали раньше на Си, вы не могли ощутить простоты применения new и delete. В программах на Си для динамического распределения памяти нужно использовать функции malloc(), calloc(), realloc() и free(). При программировании в Windows ситуация еще больше усложняется — существует целый набор функций для локального и глобального распределения памяти. Хотя их использование не так уж сложно, всегда существует вероятность запутаться. Си++ устраняет все проблемы с помощью операторов new и delete.
Вы уже видели new в действии, поэтому придется кое-что повторить. Как говорилось ранее, память можно распределять локально (в стеке) или динамически (в «куче»). Следующий фрагмент содержит примеры размещения двух символьных массивов. В одном случае память выделяется в стеке (локальное распределение), а в другом — из «кучи» (динамическое распределение):