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

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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. Строки как массив и как указатель

 

18