- •Этапы создания исполняемой программы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Структура программы
- •Вывод данных
- •Ввод данных
- •Вопросы для самоконтроля
- •Тема 1.1(2). Типы данных. Константы и переменные
- •Основные (стандартные) типы данных
- •Область действия переменных
- •1.3.1. Математические операции
- •1.3.2. Простое присваивание
- •1.3.3. Составное (сложное) присваивание
- •1.3.4. Операция приведения (преобразования) типов
- •1.3.5. Операции отношения
- •1.3.7. Операция sizeof
- •1.3.8. Операция "запятая" (,)
- •1.3.9. Условная операция (?:)
- •1.3.10. Указатель. Определение адреса переменной
- •1.3.11. Директива define
- •1.3.12. Директива include
- •1.3.13. Примеры программ
- •1.3.14. Вопросы для самоконтроля
- •Тема 1.3. Программирование алгоритмов различной структуры
- •Базовые конструкции структурного программирования
- •Операторы ветвления
- •1.4.1. Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) оператор_1;
- •1.4.2. Оператор выбора switch
- •Операторы цикла
- •1.4.3. Оператор while
- •1.4.4. Оператор do...While
- •1.4.5. Оператор for
- •1.4.6. Функция exit(), операторы break, continue, return
- •Стандартные математические функции
- •Тема 1.4. Ввод-вывод данных
- •Функции get() и put()
- •Функция getch()
- •Функция printf
- •Функция sprintf()
- •Тема 1.5. Функции. Локальные и глобальные переменные. Способы передачи данных.
- •1.5.1. Видимость переменных
- •1.5.2. Определение функции
- •1.5.3. Функция main
- •1.5.4. Вызов функции
- •1.5.5. Способы передачи данных
- •1.5.6. Возвращаемые значения функции
- •1.5.7. Использование прототипов функций
- •Тема 1.6(1). Массивы и указатели
- •Объявление массива
- •Доступ к элементам массива
- •Многомерные массивы
- •Указатели
- •Тема 1.6(2). Структуры и строки
- •1.6.1. Структуры
- •1 Способ – по шаблону.
- •2 Способ – при объявлении (описании) шаблона.
- •1.6.2. Способы реализации строк
- •1.6.3. Строковые константы
- •1.6.4. Указатель на символьную строку
- •1.6.5. Массив символов
- •1.6.6. Некоторые функции для работы со строками
- •1.6.7. Некоторые функции проверки и преобразования символов
- •Тема 1.7. Работа с памятью
- •Функция malloc
- •Функция free
- •Операция new
- •Операция delete
- •Тема 1.10. Динамические структуры
- •Разновидности динамических структур
- •Примеры программ (фрагментов программ) для работы с динамическими структурами
Указатели
Указатели – это переменные, которые содержат адреса данных.
В С++ указатели могут быть на любой тип данных.
Если необходимо, можно описать массив указателей:
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;