Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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)

 


Массив упакованный – память занимается максимально плотно, нет пустых мест => экономия памяти

Неупакованный – используется адрес, кратный машинному слову => быстрый доступ


 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных