Главная » Статьи » Програмування » C [ Добавить статью ]

RUS Уроки по программированию на языке С (Взаимосвязь строк и указателей.)

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

Мы с Вами уже обсуждали тему указателей в одном из уроков, и Вы должны помнить, как тесно они связаны с массивами. Поэтому сегодня мы так же не сможем обойти указатели стороной. В программе доступ к строке осуществляется с помощью указателя на символ. Если описать переменную 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

Категория: C | Добавил: DEN-SHP (05.11.2012)
Просмотров: 742 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]