ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Указатели на строковые константы
Рассмотрим программу TWOSTR, в которой определены две строки: одна — с ис- пользованием операций массива, а другая — с использованием указателей.
// twostr.cpp
// описание строк через массивы и через указатели
#include <iostream>
using namespace std;
int main ( )
{
char str1 [ ] = "Определение через массив";
char* str2 = "Определение через указатель";
cout << str1 << endl; // покажем наши строки
cout << str2 << endl;
//str1++; // так делать нельзя
str2++; // а так можно
cout << str2 << endl; // значение str2 немного изменилось
return 0;
}
Во многих случаях эти два способа определения строк эквивалентны. Вы мо- жете распечатать обе строки, используя их как аргументы функций. Это показа- но в примере. Но есть небольшое различие: str1 — это адрес, то есть указатель- константа, a str2 — указатель-переменная. Поэтому str2 может изменять свое значение, a str1 нет, что показано в программе. Рисунок 10.10 показывает распо- ложение этих двух строк в памяти.
Мы можем увеличить str2, так как это указатель, но после этой операции он уже больше не будет показывать на первый элемент строки. Рассмотрим резуль- тат работы программы TWOSTR:
Определение через массив Определение через указатель пределение через указатель
Строка, определенная как указатель, гораздо более гибка, чем строка, опреде- ленная как массив. В следующем примере мы используем эту гибкость.
char str1 [] = "Def....
char* str2 = "Def...
Рис. 10.10. Строки как массив и как указатель
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
