ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
МАССИВЫ. ОПЕРАЦИИ, СПОСОБЫ ПРЕДСАВЛЕНИЯ, СЛОЖНОСТЬ ОПЕРАЦИЙ.
Объявление: Состоит из компонент одного типа (базового), представляет собой структуру случайного доступа (для того, чтобы обозначить отдельную компоненту к имени добавляется индекс определенного типа, который выделяет нужную компоненту). На Паскале – <имя>: array [Tindex] of Titem; На Си – Titem <имя> [Tindex]. Типом индекса может быть любой простой тип, для которого существуют операции инкремента и декремента (все, кроме float), например: A: array [(x, y, z)] of Integer – индексный тип состоит из перечислимого типа (м. б. координаты) A: array[1..10] of Integer – индексный тип является перечислимым. Характеристики: 1) Мощность (#)= произведению мощностей компонент . 2) Размер – сумма размеров составляющих типов. Sieof (array) = sizeof(Titem)*#Tindex. Операции: 1) Индексация А[i]; 2) Присваивание A=B В Си и Паскале ее нет, но можем использовать цикл и присваивать покомпонентно или скопировав один участок памяти в другой memcopy(A, B, sizeof B) – копирует из B в А столько, сколько занимает В, но можем скопировать столько, сколько влезет в А. 3) Выделение подмассива A[5:9] – выделяем подмассив с 5го по 9й элемент A[5:9]=B[1:5] – типы должны бить эквивалентны. 4) Сравнение A==B Можем сделать циклом или memcmp(A, B, sizeof B) 5) Инициализация A[]={1,2,3}. Представление в памяти: Массив следует отображать таким способом, чтобы можно было максимально просто и эффективно вычислять адреса его компонент. 1. Одномерные: В Си операции с индексами напрямую связаны с указателями: A[i]=*(addr+i*sizeof(элемента)) – реальный адрес элемента массива в памяти можно вычислить, зная тип элемента и № нужного элемента. 2. Для двумерной матрицы: - 4 элемента в строке A[i][j] = *(A + (i-1)*N* sizeof(эл-та) + (j-1)*sizeof(эл-та) В терминах Си: *(A[i]+j)=*(*(A+i)+j) Int **A – двойной указатель, элемент A[i] должен быть уже указателем Получаем массив указателей: Упакованный/неупакованный способ хранения: Если sizeof(эл)>sizeof(word)
Массив упакованный – память занимается максимально плотно, нет пустых мест => экономия памяти Неупакованный – используется адрес, кратный машинному слову => быстрый доступ
Не нашли, что искали? Воспользуйтесь поиском:
|