/* displayArray — отображает элементы массива, имеющего длину nSize */
void displayArray( int intArray[ ] , int nSize )
{
cout << "Значения элементов массива равны:\n" ;
int* pArray = intArray ;
for ( int n = 0 ; n < nSize ; n++ , pArray++ )
{
cout << n << ": " << *pArray << "\n" ;
}
cout << "\n" ;
}
Этот вариант функции 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...
Можно сказать, что функция почти не изменилась и выполняет такие же операции, как и предыдущая версия, однако использование указателей — более распространённая практика, чем работа с массивами. По ряду причин программисты избегают работать с массивами. Чаще всего указатели используются для работы с символьными массивами.
Использование указателей для работы со строками...120
Строку с завершающим нулевым символом можно рассматривать как массив символов, в котором последний символ равен нулю ( язык С++ использует нуль как символ конца строки ). Такие нуль-завершённые массивы можно рассматривать как отдельный тип ( точнее, квази-тип ), о котором шла речь в главе 7, "Хранение последовательностей в массивах". В С++ для работы со строками часто используются указатели. В приведённых ниже примерах показано, каковы отличия в работе со строками в случае применения массивов и указателей.
С помощью указателей можно работать с символьными массивами так же, как и с массивами любого другого типа. То, что в конце любой строки находится символ конца строки, делает их особенно удобными для работы с помощью указателей, что видно на примере следующей программы.
/* DisplayString — вывод символьного массива с использованием указателей и индексов массива */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
/* Объявляем строку */
char* szString = "Randy" ;
_________________
120 стр. Часть 2. Становимся функциональными программистами
cout << "Массив ' " << szString << " ' " << endl ;
/* Выводим szString как массив */
cout << "Выводим строку как массив: " ;
for ( int i = 0 ; i < 5 ; i++ )
{
cout << szString[ i ] ;