Использование операций над указателями для адресации внутри массива...119

We use cookies. Read the Privacy and Cookie Policy

Концепция соответствия между индексацией массива и арифметикой указателей весьма полезна.

Например, функция displayArray( ), которая выводит содержимое целочисленного массива, может быть реализована следующим образом:

      /* displayArray — отображает элементы массива, имеющего длину nSize */

      void displayArray( int intArray[ ] , int nSize )

      {

           cout << "Значения элементов массива равны: " ;

           for ( int n = 0 ; n < nSize ; n++ )

           {

                 cout << n << ": " << intArray[ n ] << " " ;

           }

           cout << " " ;

      }

Эта версия функции использует операции над массивами, которые знакомы нам по предыдущим главам. Если воспользоваться для написания этой функции указателями, программа приобретёт такой вид:

      /* displayArray — отображает элементы массива, имеющего длину nSize */

      void displayArray( int intArray[ ] , int nSize )

      {

           cout << "Значения элементов массива равны: " ;

           int* pArray = intArray ;

           for ( int n = 0 ; n < nSize ; n++ , pArray++ )

           {

                   cout << n << ": " << *pArray << " " ;

           }

           cout << " " ;

      }

Этот вариант функции displayArray начинается с создания указателя на первый элемент массива intArray.

«Буква р в начале имени переменной означает, что эта переменная является указателем, однако это только соглашение, а не стандарт языка С++.»

[Помни!]

_________________

119 стр. Глава 9. Второе знакомство с указателями

После этого функция считывает все элементы массива по порядку. При каждом выполнении оператора for происходит вывод текущего элемента из массива intArray. Этот элемент находится по адресу рArray, который увеличивается на единицу при каждом выполнении цикла.

Убедиться в работоспособности описанной функции можно, используя её в следующей функции main( ):

      int main( int nNumberOfArgs , char* pszArgs[ ] )

      {

           int array[ ] = { 4 , 3 , 2 , 1 } ;

           displayArray( array , 4 ) ;

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

           system( "PAUSE" ) ; return 0 ;

      }

Результат работы этой программы имеет следующий вид:

 

    Значения элементов массива равны:

    0: 4

    1: 3

    2: 2

    3: 1

    Press any key to continue...

Можно сказать, что функция почти не изменилась и выполняет такие же операции, как и предыдущая версия, однако использование указателей — более распространённая практика, чем работа с массивами. По ряду причин программисты избегают работать с массивами. Чаще всего указатели используются для работы с символьными массивами.