Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билет №2.Одномерный массив. Доступ к элементам....doc
Скачиваний:
9
Добавлен:
15.04.2019
Размер:
168.96 Кб
Скачать

Размещение массива в памяти

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

char string[64];

float salaries[50];

int scores[100];

long planets[13];

+-

Как можно видеть, первое значение массива расположено по смещению 0. В разделе "Язык Си: начало" переменная определялась как имя, связываемое с одной или более ячеек памяти. В случае массива число таких ячеек памяти может быть значительно больше.

456. Объем памяти для массива

Как мы уже знаем, массив есть именованное множество значений одного и того же типа. При объявлении массива Си выделяет достаточно памяти для размещения указанного количества элементов, фактически требуемый объем памяти зависит от типа массива. Например, для массива из 100 элементов типа int требуется 100 * 2, т.е. 200 байтов памяти. С другой . стороны, для массива из 100 элементов типа float требуется 100* 4, или 400 байтов. В следующей программе ARRAYSIZ.C для вывода на экран количества памяти, требуемой для массивов различных типов, используется оператор sizeof:

#include <stdio.h>

void main(void)

{

int scores[100];

float salaries[100];

char string[100];

printf("Массиву int scores[100] выделяется %d байт\n", sizeof(scores));

printf("Массиву int salaries[100] выделяется %d байт\n", sizeof(salaries));

printf("Массиву char string[100] выделяется %d байт\n", sizeof(string));

}

После компиляции и выполнения этой программы на экран выводится:

C:\> ARRAYSIZ <Enter>

Массиву int scores[100] выделяется 200 байтов

Массиву float salaries[100] выделяется 400 байтов

Массиву char string[100] выделяется 100 байтов

457. Инициализация массива

Многие примеры, приведенные в этой книге, содержат проинициализированные символьные строки,например:

char title[] = "1001 совет по C/C++";

char section[64] = "Массивы";

В первом случае Си-компилятор выделяет 20 байтов для хранения строки. Во втором случае компилятор выделяет массив 64 байта, инициализируя первые 8 символов словом "Массивы" и двоичным нулем. Большинство компиляторов инициализирует двоичным нулем и остальные байты. Массивы других типов инициализируются аналогично. Например, следующий оператор инициализирует массив scores целых чисел значениями 80,70,90,85 и 80:

int scores[5] = {80, 70, 90, 85, 80};

При присваивании массиву начальных значений эти значения заключаются в фигурные скобки { }. Е нашем случае размер массива соответствует количеству начальных значений. В следующем операторе присваивается 4 действительных значения массиву, который в действительности может содержать 64 значения:

float salaries[64] = {25000.0, 32000.0, 44000.0, 23000.0};

В зависимости от компилятора, остальным 60 элементам могут быть присвоены нули. Как правило, не следует делать предположения об инициализации оставшихся элементов по умолчанию. Если размерность массива не указана, компилятор выделит ровно столько памяти, сколько нужно для хранения заданных начальных значений. Следующее объявление создает массив достаточно большой для того, чтобы содержать 3 значения типа long:

long planets[] = {1234567L, 654321L, 1221311L};