Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SAOD_Konspekt-I.doc
Скачиваний:
14
Добавлен:
03.11.2018
Размер:
2.32 Mб
Скачать

2.4.3 Указатели на указатели

Поскольку указатель – это объект в памяти, то можно определить указатель на указатель, указатель на указатель на указатель, и так сколько нужно раз.

int i = 88;

int *pi = &i;

int **ppi = π

int ***pppi = &ppi;

***pppi ~ 88

Порядок выполнения операции * – справа налево, поэтому обеспечивается последовательный доступ к участку памяти с адресом pppi, затем – с адресом (*pppi) ~ ppi, затем – с адресом (*ppi) ~ pi, затем с адресом (*pi) ~ i.

pppi –> (*pppi) ~ ppi –> (*ppi) ~ pi –> (*pi) ~ i

***pppi ~ *(*(*pppi))

2.5. Алгоритмы обработки простых структур данных

Уровень сложности простых структур данных таков, что понятие «алгоритм обработки» к ним мало применимо. Лучше использовать термин «операция». Из основных алгоритмов обработки, перечисленных во введении, к простым структурам применимы операции просмотра и модификации в разных вариантах, например на языке Си++:

#include <iostream.h> // #include – аналог директивы uses в Паскале

int main() // Точка входа в программу (начало программы)

{

int a; // Создание (определение) локальной переменной без инициализации

cin >> a; // Ввод с клавиатуры (из внешнего потока ввода)

a++; // Модификация (инкремент)

a--; // Декремент

if(a = = 0) // Сравнение

a = 1; // Модификация (присваивание значения)

cout << a; // Считывание – вывод на дисплей (во внешний поток вывода)

return 0; // Завершение программы

}

3. Линейные статические структуры данных

3.1 Массивы

Как было отмечено выше, арифметические операции, выполняемые над указателем и целым значением, имеют осмысленный результат, если указатель адресует непрерывный блок памяти, хранящий множество элементов одного типа. Именно этот блок и называется массивом. Одномерные массивы часто называются векторами.

Массив объявляется указанием числа элементов массива, которое должно быть положительным целым константным выражением, заключённым в квадратные скобки [ ].

float echo[10];

Индексация элементов массива в языке C++ начинается с нуля.

Массивы в принципе являются статическими структурами данных, т.е. не могут изменять изначально заданный размер. В то же время в языках Си/Си++ могут существовать переменные любых типов и массивы, отдельно специфицированные как статические (т.е. имеющие статический класс памяти).

static int mas1[20];

Это означает, во-первых, что такие переменные и массивы существуют в программе от точки создания до конца работы программы и, во-вторых, гарантируется, что такие переменные и массивы инициализируются нулями или эквивалентными значениями.

В разных языках программирования информация о размере массива может храниться в самом массиве (дескрипторный способ в языке Паскаль), либо размещаться в системных переменных и быть недостпной для программиста (обычные массивы с Си/Си++). В последнем случае при работе с массивом требуется явно указывать его размер.

Массивы могут быть инициализированы набором значений, заключённых в фигурные скобки. Если при инициализации число значений меньше заданного числа элементов, то оставшиеся элементы инициализируются нулями или эквивалентными значениями.

int a[5] = {7, 6, 9}; // a[3]=a[4]=0

Если указаны все инициализирующие значения, то размер одномерного массива (или число элементов по первой размерности для многомерного массива) может отсутствовать. Для одномерного массива оно равно числу инициализирующих значений.

int a[] = {7, 6, 9, 3, 4};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]