
- •Оглавление.
- •Этапы создания программного продукта.
- •Структурирование программы.
- •Этапы получения программного кода
- •Функциональная декомпозиция
- •Алгоритм программы
- •Линейные алгоритмы
- •Развилка
- •Функция main
- •Блоки кода
- •Комментарии
- •Базовые понятия языка Си.
- •Специфика присвоения имён.
- •Ключевые слова Си
- •Понятие lvalue и rvalue.
- •Типы данных.
- •Функции
- •Блоки кода программы.
- •Операторы языка c.
- •Логические операторы
- •Тернарный оператор
- •Базовые типы данных. Типы данных
- •1)Базовые
- •2)Производные
- •Файловый ввод - вывод.
- •Булевые переменные (тип bool).
- •Понятие, объявление и определение.
- •Ключевое слово typedef.
- •Виды компоновки программ:
- •Скрытие имени переменной.
- •Инструкции условий.
- •Переключатель switch
- •Инструкции цикла.
- •Инструкции безусловного перехода.
- •Препроцессор. Заголовочные файлы. Директивы препроцессора.
- •Список директив препроцессора (все начинаются с #).
- •Предопределённые идентификаторы.
- •Диагностический макрос (микрокоманда) assert.
- •Указатели.
- •Инициализация указателя и оператор получения адреса объекта.
- •Арифметика указателей.
- •Массивы.
- •Объявление встроенного массива.
- •Инициализация массива.
- •Явная инициализация.
- •Обращение к элементу массива. Оператор [].
- •Связь массивов и указателей.
- •Двумерные массивы.
- •Оператор new и массивы.
- •Многомерные массивы.
- •Ссылки.
- •Объявление:
- •Инициализация:
- •Получение значений:
- •Функции.
- •Определение функции (реализация).
- •Вызов inline функции.
- •Способы передачи параметров
- •Использование “ , ” , формирование параметров.
- •Указатели на массивы в качестве параметров функции.
- •Значения аргументов функций по умолчанию.
- •Переменное число параметров функции.
- •Функции стандартной библиотеки
- •Виды возвращаемых значений и механизмы их формирования.
- •Проблемы при возвращении ссылки или указателя.
- •Ключевое слово const.
- •“Перегрузка” имён функции.
- •Возможный конфликт при использовании параметров по умолчанию.
- •Рекурсивные функции.
- •Структуры Си.
- •Структуры и функции.
Многомерные массивы.
pf=new float[n][2]; //создали массив векторов
delete []pf;
int M=выражение;
int N=выражение;
int *p=new int[M*N];
p[i*M+j]=…;
Операция new в памяти более сложна, чем выделение, т.к. программист явно или неявно передаёт информацию о количестве элементов, а оператор delete получает только титрированный указатель.
Проблема состоит в определении: является ли данный указатель указателем на одиночный объект или на массив объектов. Для этих целей в C++ существует две формы delete:
delete для одиночных объектов;
delete для массива.
Ссылки.
Косвенное обращение к объекту.
Указатель (pointer) – переменная, Ссылка (reference)
переменная, которая явно содержит адрес объекта. |
которая тоже содержит адрес объекта, но синтаксически ею пользуется также, как и самим объектом. |
Объявление:
int *p=&x; int &r=x; // ссылка с именем
Инициализация:
int *p; //OK //int &r; // ERROR!!!
Получение значений:
int tmp=*p; int tmp=r;
(*p)++; r++;
Примечание. Ссылку можно интерпретировать как константный указатель, при каждом использовании которого, автоматически происходит разыменование.
Модификация адреса. Если указатель не объявлен как константный, то значение такого адреса можно изменять. Ссылка тоже содержит адрес, но этот адрес формируется один раз при инициализации, и изменить его невозможно.
p++; //OK r++;
int y; int y=5;
p=&y; //OK r=y; //r=y=x=5;
Комментарий: переменной x (адрес которой содержится в ссылке r) будет присвоено значение y.
Нулевое значение. Указатель может быть равен нулю (никуда не указывает). Ссылка всегда содержит адрес того объекта, которым она была проинициализирована.
if (p) if (r)
Применение оператора &. Чтобы получить указатель на объект, псевдонимом которого является ссылка r, можно применить к ссылке операцию получения адреса объекта (&).
int **pp=&p; int *pr=&r; (указывает на объект, псевдоним
которого является
int y=**pp;
ссылка, то есть pr содержит адрес r
переменной x
Ссылка на указатель.
int n; ссылки на ссылку не
существует
int *p=&n; int n;
int *&refp=p; int &r=n;
*ref p=2; //n=2; int &rr=r; // ERROR!!!
*p=4;
void
void *p; //OK void &r=x;
//ERROR!!!
не знаем какого типа или какая память выделится т.к. ссылка – это всегда псевдоним совершенно определённого объекта
size of
double *p; double d;
size_t n=sizeof(p); //4 байта double &rd=d;
size_t n=sizeof(rd); //8 байт
Инициализация литералом.
константная ссылка
int *p=0x10000000; //ERROR!//СИ int &r=1; //ERROR!!!
int *p=(int*)0x10000000; //OK!//СИ++ const int &r=1; //OK!
int *p=reinterpret_cast<int*>(0x10000000);