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

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

Массивы указателей на строки

Массив указателей — это то же, что и массив переменных типа int или float. Обычно он используется в качестве массива указателей на строки.

В примере STRARAY главы 7 был продемонстрирован массив строк char*. Как мы заметили, использование массива строк нерационально по причине того, что все подмассивы, содержащие строки, должны быть одной длины, и пространст- во будет простаивать, если строка короче, чем длина подмассива (см. рис. 7.10 в главе 7).

Давайте рассмотрим, как использование указателей решает эту проблему. Мы модифицируем пример STRARAY и создадим массив указателей на строки вместо массива строк. Листинг программы PTRTOSTR:

// ptrtostr.cpp

// массив указателей на строки

#include <iostream>

using namespace std;

const int DAYS = 7;

 

int main ( )

{

  // массив указателей на строки

  char* arrptrs [ DAYS ] = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" };

 

  for ( int j = 0; j < DAYS; j++ ) // покажем все строки

    cout << arrptrs [ j ] << endl;

 

  return 0;

}

Результат работы этой программы будет тем же, что и программы STRARAY:

Понедельник

Вторник

Среда

Четверг

Пятница

Суббота

Воскресенье

В том случае, если строки не являются частью массива, то C++ размещает их в памяти друг за другом, чтобы не было пустого пространства. Однако для по- иска строк создается массив, содержащий указатели на них. Сами строки — это массивы элементов типа char, поэтому массив указателей на строки является массивом указателей на char. Это и означает определение массива arrptrs в про- грамме PTRTOSTR. Теперь вспомним, что адресом строки является адрес ее первого элемента. Именно эти адреса хранит массив указателей на строки. На рис. 10.12 показано, как это выглядит.

Рис. 10.12. Массив указателей и строки

 

23