- •Алгоритмы и свойства алгоритмов.
- •Блок-схема.
- •Основные управляющие конструкции.
- •Арифметические операции.
- •Приоритет и порядок вычислений
- •Преобразование типов при выполнении операций.
- •Операции увеличения и уменьшения.
- •Математические библиотечные функции.
- •Операции отношений.
- •Логические операторы.
- •Приоритеты логических операций.
- •2Ая лекция.
- •Операторы цикла.
- •Операторы BreakиContinue.
- •Указатели.
- •Объявление указателей.
- •Классы памяти.
- •Инициализация указателей.
- •Указатель на неопределенный тип.
- •Выражения с указателями.
- •Операции с указателями.
- •Указатели и массивы.
- •Удаление памяти.
- •Указатели многомерных массивов.
- •Свободные массивы.
- •Функции.
- •Передача массива в виде параметра.
- •Классы памяти.
- •Макрофункции.
- •Вложенные структуры.
- •Работа с файлами.
- •Работа с бинарными файлами.
Объявление указателей.
Указатели тоже должны быть объявлены в программе. Общий вид: класс памяти тип * имя. Пример: int*iptriptr– указатель на объект типаint, этим объектом может быть простая переменная типаint, массив того же типа или блок памяти полученный в данном распределении.
Другие примеры: staticfloat*f;
Extern double *z;
Extern char *ch;
Каждое из этих объявлений выделяет память для переменных типа указатель, но каждый пока, ни на что не указывает. До тех пор, пока указателю не будет присвоен адрес какого-либо объекта, его нельзя использовать в программе.
Классы памяти.
Класс памяти определяет порядок размещения объекта в памяти. Язык C++ располагает 4мя спецификаторами класса памяти этоauto,register,static,extern.
Динамический класс памяти |
Статический класс памяти | |||
Автоматический |
Регистровый |
Локальный |
Глобальный | |
Auto |
register |
Static |
extern |
Auto– спецификатор автоматического класса памяти, указывает на то, что объект располагается в локальной (автоматически распределяемой) памяти, он используется в операторах объявления в теле функций, а также внутри блоков операторов. Объекты, имена которых объявляются со спецификаторомauto, размещаются непосредственно в локальной памяти перед началом выполнения функции. При выходе из блока или при возвращении из функции соответствующая область памяти освобождается и все ранее размещенные в ней объекты уничтожаются. Вне блока функций этот оператор не используется.
Register– применяется к объектам, по умолчанию располагаемых в локальной памяти. Представляет собой просьбу транслятору (если это возможно) о размещении значений объектов в регистрах процесса. Если по какой-либо причине в момент начала выполнения кода регистры оказываются занятыми, объекты размещаются в локальной памяти, аналогичноAuto.
Static– определяемый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения и до конца выполнения программы. Объект со спецификаторомstaticлокален в одном программном модуле.
Extern– спецификатор внешнего статистического класса памяти. Объект существует с момента его определения до конца выполнения программы. Объект, объявленный с данным спецификатором доступен во всех модулях программы, т.е. глобален. Для получения адреса какого-либо объекта используется операция &. Эта операция позволяет присваивать указателям адреса объекта.
Доступ к объекту через указатель. Выполняется с помощью унарной операции *, которая называется операцией разадресации или операцией обращения по адресу. Операция * рассматривает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого. Другими словами * означает извлечь содержимое по адресу, на который указывает указатель. Для вывода адреса памяти, содержащегося в указателе, используется спецификатор формата %p. Пример программы, которая будет выводить значение указателя и объекта, на который она указывает.
Main()
Int x, *px;
Px=&x;
X=35;
Printf(“адрес х %p”, &x);
Printf(“значение указателя %p”,px);
Printf(“значение х %d”,x);
Printf(“значение, адресуемое указателем %d”, *px);
}
Унарная операция разадресации * может быть использована в левой части оператора присваивания, чтобы запомнить какие-либо данные в области памяти, на которые указывает указатель. Пример:
Floaty, *py=&y;
*py=-1,2; это присвоение значения 1,2 по адресу, хранящемуся в указателе.