Главная->Інформатика та програмування->Содержание->Указатели-константы и указатели-переменные

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн

Указатели-константы и указатели-переменные

Предположим, что мы хотим использовать операцию увеличения вместо прибав- ления шага j к имени intarray. Можем ли мы записать *(intarray++)?

Сделать так мы не можем, поскольку нельзя изменять константы. Выраже- ние intarray является адресом в памяти, где ваш массив будет храниться до окон- чания работы программы, поэтому intarray — это указатель константы. Мы не можем сказать intarray++, так же как не можем сказать 7++. (В многозадачных системах адресная переменная может менять свое значение в течение выполне- ния программы. Активная программа может обмениваться данными с диском, а затем снова загружать их уже в другие участки памяти. Однако этот процесс невидим в нашей программе.)

Мы не можем увеличивать адрес, но можем увеличить указатель, который содержит этот адрес. В примере PTRINC мы покажем, как это работает:

// ptrinc.cpp

// доступ к массиву через указатель

#include <iostream>

using namespace std;

 

int main ( )

{

  int intarray [ 5 ] = { 31, 54, 77, 52, 93 }; // набор целых чисел

  int* ptrint;                     // указатель на int

  ptrint = intarray;               // пусть он указывает на наш массив

 

  for( int j = 0; j < 5; j++ )     // для каждого элемента массива

    cout << *( ptrint++ ) << endl; // напечатаем его значение

 

  return 0;

}

Здесь мы определили указатель на int — ptrint — и затем присвоили ему зна- чение адреса массива intarray. Теперь мы можем получить доступ к элементам массива, используя выражение

*( ptrint++ )

Переменная ptrint имеет тот же адрес, что и intarray, поэтому доступ к перво- му элементу массива intarray[0], значением которого является 31, мы можем осу- ществлять, как и раньше. Но так как переменная ptrint не является константой, то мы можем ее увеличивать. После увеличения она уже будет показывать на второй элемент массива intarray[1]. Значение этого элемента массива мы можем получить, используя выражение *(ptrint++). Продолжая увеличивать ptrint, мы можем получить доступ к каждому из элементов массива по очереди. Результат работы программы PTRINC будет тем же, что и программы PTRNOTE.

 

11