- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Указатели
Все рассмотренные ранее примеры организации переменных, называется организация статических переменных. Для таких переменных память выделяется автоматически при запуске программы и так же автоматически освобождается при завершении программы. В этом случае обращение к переменной происходит по её идентификатору. Но существует и другой способ обращения к переменной – по ее адресу, по которому записано значение. Для этого необходима переменная для хранения адреса, которая называется указателем.
Указатель – это переменная, значением которой является адрес памяти, по которому хранится объект определённого типа.
Значение указателя –это без знаковое целое представляющее собой адрес переменной любого типа.
Формат объявления указателя:
Тип [ модификатор] * имя_указателя;
Тип * имя_указателя;
Тип – идентификатор типа переменной, адрес которой будет содержать переменная-указатель.
[модификатор] – необязателен, предназначен для объявления размера ОП, отведенной под указатель. По умолчанию размер ОП установлен 16 бит.
Имя_указателя – идентификатор переменной – указатель.
*(звёздочка) – свидетельствует о том, что переменная с указанным идентификатором является указателем. Чтобы объявить несколько указателей, звёздочку ставят перед каждым идентификатором.
Пример объявления указателей
char* ps ; // указатель на символьную переменную
float *ptr ; // указатель на переменную с плавающей точкой
int *px, *py ; // указатели на целочисленые переменные
char* p, ch ;
// указатель p на символьную переменную и ch - символьная переменная.
Идентификатор переменной - указатель лучше начинать с символа р.
Пример инициализации указателей нулевым значением
char* ps = 0 ;
int *px = 0, *py = 0 ;
char *p = 0 ;
double* pD = 0 ;
При объявлении указателя на переменную (любого типа), оперативная память ещё не выделена под переменную, поэтому указатель не имеет определенного адреса.
Порядок выполнения операций над указателями
& - Взять адрес. Получить адрес переменной.
Пример взятия адреса &
#include <iostream>
using namespace std ;
int main ( )
{
int x = 5 ;
int * px = & x ; // взятие адреса x
cout << "Value x\t\t" << x << endl ; // вывод значения x
cout << "Address x\t" << & x << endl ; // вывод адреса x
cout << "Pointer px\t" << px << endl ; // вывод значения px
return 0 ;
}
*(звёздочка) – Разыменование. Получить значение переменной по её адресу
Пример разыменовывания указателя *
#include <iostream>
using namespace std ;
int main ( )
{
double v1 = 0.05, v2 = 2.5e32 ;
double * pv ; // объявление указателя
pv = & v1 ; // взятие адреса v1
cout << "pv =\t" << pv << endl ; // вывод адреса v1
cout << "v1 =\t" << v1 << endl ; // вывод значения v1
cout << "*pv = \t" ;
cout << * pv << endl ; // вывод значения v1 по адресу который хранится в указателе pv
pv = & v2 ; // взятие адреса v2
cout << "pv =\t" << pv << endl ; // вывод адреса v2
cout << "v2 =\t" << v2 << endl ; // вывод значения v2
cout << "*pv = \t" ;
cout << * pv << endl ; // вывод значения v2 по адресу который хранится в указателе pv
return 0 ;
}
= - Присваивание. Присвоить указателю адрес переменной или 0.
Пример выполнения операции присвоения
int *px = 0, *py = 0 ;
double v1 = 0.05 ;
double * pv = & v1 ;