Здавалка
Главная | Обратная связь

Взаимосвязь строк и указателей.



Мы с Вами уже обсуждали тему указателей в одном из уроков, и Вы должны помнить, как тесно они связаны с массивами. Поэтому сегодня мы так же не сможем обойти указатели стороной. В программе доступ к строке осуществляется с помощью указателя на символ. Если описать переменную message как

char *message;

то в результате выполнения оператора

message = "and bye!";

message станет указателем на строку. Обратите внимания, что оператор cin нельзя будет применять к такому указателю.

#include <iostream> using namespace std; char *message; char privet[] = "and bye!"; char *pr = privet; void main () { message = "Hello"; cout << " " << message << " " << pr << "\n"; int i = 0; while (*(pr+i)!='\0') { cout<< *(pr+i++) << " "; } }

Использование указателей часто применяется при работе с массивом строк. В этом случае к каждой строке можно обратиться с помощью указателя на его первый символ. Это удобно тем, что для перестановки двух строк, расположенных в неправильном порядке, фактически достаточно переставить указатели в массиве указателей, а не сами строки.

Рассматривается функция month_name(), которая возвращает указатель на строку, содержащий имя n-го месяца. Это типичная задача для использования строкового массива.

Функция month_name() содержит локальный массив строк и при обращении к ней возвращает указатель на нужную строку.

В описании массива указателей на символы name[] инициализатором является просто список строк. Символы i-й строки помещаются в определенное место памяти, а указатель на ее начало хранится в элементе name[i]. Поскольку размер массива name не указан, компилятор сам подсчитывает количество инициализаторов и соответственно устанавливает правильное число.

#include <iostream> using namespace std; const int n=15; void main () { char *month_name(int); /* ------------- */ for (int i=0; i < n; i++) cout << "Month number " << i << " - " << month_name(i) <<"\n"; } /* ------------------------------------------- */ char *month_name (int k) /* Название k-го месяца */ { static char *name[] = { "none","January", "February","March","April", "May","June","July","August", "September","October","November", "December" }; return (k<1||k>12)?name[0]:name[k]; }

Результат работы программы:

Month number 0 - none Month number 1 - January Month number 2 - February Month number 3 - March Month number 4 - April Month number 5 - May Month number 6 - June Month number 7 - July Month number 8 - August Month number 9 - September Month number 10 - October Month number 11 - November Month number 12 - December Month number 13 - none Month number 14 - none Press any key to continue  
Предыдущая Оглавление Следующая  
Предыдущая Оглавление Следующая
           






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.