Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПП. ЛЕКЦИИ! Готовимся к экзамену))).docx
Скачиваний:
12
Добавлен:
10.12.2018
Размер:
175.63 Кб
Скачать

Указатели

Указатели – это переменные, которые содержат адреса данных.

В С++ указатели могут быть на любой тип данных.

Если необходимо, можно описать массив указателей:

int*ip[10]; // массив указателей из 10 элементов на целые значения

С указателем можно производить некоторые арифметические операции. Например, при работе с массивами.

Пусть переменная sub содержит номер элемента массива, тогда до этого элемента можно "добраться" разными способами:

mas [ sub ]

или

*(mas +sub) // имя массива фактически является указателем на нулевой элемент массива,

// а переменная sub указывает, на сколько элементов необходимо сместиться

Указатель можно инкрементировать и декрементировать. При этом происходит смещение на один элемент массива независимо от типа элемента.

Пример

Допустим uk – адрес нулевого элемента массива, тогда

cout<<*uk; // вывод значения 0-го элемента

uk++;

cout<<*uk; // вывод значения 1-го элемента, реально смещение на несколько байтов

uk+=2

cout<<*uk; // вывод значения 3-го элемента

Наиболее полезное применение массивов указателей – это массив указателей на строки.

Пример

char names [3] [20]= {

{"Иванов"},

{"Петров"},

{"Сидоров "}

};

Схематично этот массив можно изобразить следующим образом

Для вывода строки можно использовать команду:

cout<< *names; // выводится «Иванов»

Тема 1.6(2). Структуры и строки

Цели изучения темы

  • изучить способ описания и работы со структурами;

  • научится работать со строками.

1.6.1. Структуры

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

Структура – это множество, состоящее из нескольких элементов разных типов (аналог записи в ЯП Pascal).

Каждый элемент структуры называется полем.

При объявлении (описании) структуры указывается стандартное слово struct, затем имя структуры и определяются все элементы структуры (указываются их имена и типы).

Пример объявления структуры (содержащей данные о сотруднике):

struct sotr

{

char familia [25]; // массив из 25 символов

char adres [30]; // массив из 30 символов

long int telefon;

};

Так задается шаблон структуры;

где имя шаблонаsort;

поляfamilia, adres, telefon.

Под объявление шаблона компилятор память не выделяет.

На основе шаблона структуры создается структурная переменная (экземпляр структуры), под которую выделяется память и с которой можно работать в программе.

Структурные переменные можно создавать разными способами.

1 Способ – по шаблону.

Пример (по шаблону sort):

struct sotr с1, с2, с3;

здесь создаются три структурные переменные (три экземпляра структуры) – с1, с2, с3.

В ЯП С++ слово struct можно опускать (не указывать):

sotr с1, с2, с3;

2 Способ – при объявлении (описании) шаблона.

Пример (при объявлении шаблона sort):

struct sotr

{

char familia [25];

char adres [30];

long int telefon;

} c1, c2, c3;

здесь также создаются три структурные переменные (три экземпляра структуры) – с1, с2, с3.

Доступ к каждому элементу происходит с помощью оператора «точка» и имеет вид:

имя_структурной_переменнной.имя_поля

Примеры:

c1. telefon=321123;

cout << с1.telefon;

Структуры можно инициализировать двумя способами:

  • во время объявления шаблона

  • в теле программы.

Инициализация структуры во время объявления шаблона:

struct sotr

{

char familia [25];

char adres [30];

long int telefon;

} c1={ //инициализируется структурная переменная с1

"Антонов А.И.",

"ул. Седова 25, 10"

321123 },

c2, c3;

Инициализация структуры во время работы программы выполняется присваиванием значений полям структуры или вводом значений полей (например, с клавиатуры):

Пример присваивания значений полям структуры:

strcpy (c2 .familia, "Антонов А.И. "); // копирует "Антонов А.И. " в поле c2 .familia

strcpy (c2 .adres, "ул. Седова 25, 10");

с2.telefon=321595;

Пример ввода значений полей с клавиатуры:

cout<< "Введите фамилию ";

gets (c3.familia);

cout<< "Введите адрес ";

gets (c3.adres);

cout<< "Введите телефон ";

cin >> (c3.telefon);

Функция gets(s) вводит строку символов с клавиатуры и записывает ее в строку s, объявленную как char s[] или char *s.

Можно использовать указатель на структуру.

Пример:

sotr *uk;

uk = &c2;

При использовании указателя на структуру, для доступа к полям вместо точки нужно указывать оператор -> (стрелку).

Пример:

cout << "Фамилия "<< uk->familia; cout << "Адрес "<< uk->adres;

cout << "Телефон "<< uk->telefon;