Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример 3_2_1. Строки как массивы символов




#include <iostream>

using std::cin;

using std::cout;

using std::endl;

Int main()

{

       char string1[20],//массив из 20 символов:

                              //19 для хранения символов строки и 1 завершающий

          string2 [] = "строка символов";//массив из 16 символов:

                                                                  //15 исходных и 1 завершающий

       cin>> string1; //cin читает символы с клавиатуры до тех пор,

                          //пока не встретится символ разделитель

       cout<<"символы строки string1:"<<endl;

       for (int i=0; string1[i]!= '\0'; ++i) //пока не встретился

                   cout<<string1[i]<<'  ';   //символ конца строки, вывод

                                                                  //символов строки string 1через пробел

cout<<endl;

       cout<<" строка string2:" <<string2<<endl;// вывод символов строки string2

       system("pause");

       return 0;

}

 

Для обработки строк можно использовать функции стандартной библиотеки (заголовочный фалйл < cstring >), например:

strlen                      – длина строки

strcpy, strncpy       – копирование символов одной строки в другую

strcmp, strncmp     – сравнение срок

strstr                      – выделение подстроки

strtok                      – выделение лексем (подстрок, ограниченных

определенным символом)

 

Пример 3_2_2. Использование функции strlen ()

 

# include < cstring >

#include <iostream>

using std::cout;

Int main()

{

       //функция strlen – длина строки

       char * str = "12321";

       int k=1;

       for(int i=0; i < static_cast<int>(strlen(str)/2); ++i) {

if (str[i]!= str[strlen(str) - i - 1]){ // -1 обязательно,

//иначе выход за границу массива!

                   k=0; break;

}

       }

       k? cout<<"true\n": cout<<"false\n"; // в данном случае – "true"

       system("pause");

       return 0;

}

 

Указатели и ccылки

 

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

Указатель – это производный тип, который предназначен для хранения адреса.

Значение указателя – адрес памяти. Значение указателя сообщает о том, где размещен какой-либо объект, но не сообщает о том, какое значение имеет этот объект.

Операция разыменования или разадресации, применяемая к указателю, позволяет получить доступ к значению, адрес которого хранится в указателе.

Объявление указателя:

тип *имя_указателя;     // тип –тип данных, адрес которых хранит указатель

// имя_указателя – имя_переменной

Например:

int x = 5;   // x –целая переменая

int *ptr_ x;// ptr _ x –указатель на целую переменную

void *ptr_ v;// ptr _ v –обобщенныйуказатель

xptr = &x;// Переменной ptr_ x присваивается адрес переменной x

              // Операция & применима только к переменной – это операция

//  взятия адреса

int y = *ptr_ x;// Операция * – это операция разыменования, которая

// возвращает значение, находящееся по адресу, записанному в

// указателе. В данном примере y получит значение 5.

              // Данное определение y эквивалентно int y = x

ptr _ x = static _ cast < int *>(ptr _ v); // правильное приведение обобщенного

// указателя к типизированному указателю:

// ptr _ x получит значение ptr _ v

Указатель на константу и константный указатель. Указатель может быть константой или переменной, а также указывать на константу или на переменную. Если const стоит слева от звездочки, то это указатель на неизменяемые данные, если справа, то сам указатель –константа.

Например:

int x;               // x –целая переменая

const int c x=1;      // cx –целая константа

int * ptr_x;              // ptr _ x –указатель на целую переменную

const int* ptr _ c x;  // ptr _ cx –указатель на целую константу

int* const с ptr _x=& x;// cptr _ x –указатель-константа на целую переменную

const int* const с ptr_cx=& с x;

// cptr _ cx –указатель-константа на целую константу

Неконстантный указатель на константу (в примере ptr _ c x) "охраняет" значение данных, размещенных по этому указателю. Указатель изменить можно, данные – нельзя.

Константный указатель на переменную (в примере cptr _x) "охраняет" область памяти, выделенную для размещения данных – указатель изменить нельзя. При этом значения данных по этому указателю можно изменять в ходе выполнения программы.

Арифметические операции с указателями позволяют изменить как значение самого указателя, так и данных, которые «храняться по указателю».

Например:

int * ptr;                // ptr –указатель на целую переменную

*ptr++ = 10;        // Последовательность действий:

// 1. по адресу, записанному в ptr, будет записано значение 10;

// 2. значение ptr будет увеличено на количество байт,

//     соответствующее его типу.

// эквивалентно:  *ptr = 10;  ptr++;

(*ptr)++;        // значение по адресу ptr будет увеличено на 1

Ссылка – это синоним имени, указанного при инициализации ссылки.

Ссылка – это указатель, который всегда разыменовывается.

Объявление ссылки:

тип &имя_ссылки; // тип –тип данных, на которую указывает ссылка

// имя_ссылки – имя_переменной

Например:

Int i;

       int & rfc = i;          // rfc – сылка на целую переменную i





Поделиться с друзьями:


Дата добавления: 2018-10-14; Мы поможем в написании ваших работ!; просмотров: 351 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2580 - | 2341 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.