Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Арифметические операции с указателями и с указа...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
107.33 Кб
Скачать
  1. Инициализация массивов по умолчанию. Явная инициализация массивов.

Инициализация по умолчанию в С++

глобальные массивы (расположенные вне любой функции), а также массивы, объявленные статическими внутри функции, по умолчанию заполняются нулями, если не заданы начальные значения элементов массива. Массивы указателей заполняются значениями null.

Эта программа на языке С демонстрирует инициализацию массивов,

выполняемую по умолчанию.

#include ‹stdio.h›

#define iGLOBAL_ARRAY_SIZE 10 #define iSTATIC_ARRAY_SIZE 20 int iglobal_array[iGLOBAL_ARRAY_SIZE];

/* глобальный массив */ main () { static int istatic_array[iSTATIC_ARRAY_SIZE];

/* статический массив */ int i;

for (i = 0; i < iGLOBAL_ARRAY_SIZE; i++) printf ("iglobal_array [%d].:%d\n",i, iglobal_array [i] ) ;

for(i= 0; i < iSTATIC_ARRAY_SIZE; i++) printf("istatic_array[%d]: %d\n", i, istatic_array[i]); return(0); }

После запуска программы на экран будут выведены нулевые значения, присвоенные элементам массива по умолчанию. Данная программа выявляет еще один существенный момент работы с массивами: первый элемент массива всегда имеет нулевой индекс. Это связано с тем, что создатели языка С стремились максимально приблизить его к ассемблерным языкам, где первый элемент таблицы всегда имеет нулевое смещение.

Явная инициализация в С++

элементам как глобальных, так и локальных массивов можно явно присваивать начальные значения.

В следующем фрагменте программы содержится объявление четырех массивов, инициализируемых явно:

int iarray[3] = {-1,0, 1};

static float fpercent[4] = {1.141579,0.75,55E0,-.33E1);

static int ideoimal[3] = {0,1, 2, 3, 4, 5, 6, 7, 8, 9};

char cvowels[] = {'A','a','E','e','I','i','O','o','U','u'};

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

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

В третьей строке показан пример задания большего числа элементов массива, чем в нем на самом деле содержится. Многие компиляторы рассматривают подобную ситуацию как ошибку, тогда как другие автоматически увеличивают размер массива, чтобы вместить дополнительные элементы. Компилятор MicrosoftVisualC++ выдаст ошибку вида "too many initializers" (слишком много инициализаторов). В противоположной ситуации, когда при инициализации указано меньше значений, чем элементов массива, оставшиеся элементы по умолчанию примут нулевые значения.

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