Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Инициализация одномерных массивов




Объявление одномерных массивов

Синтаксис определения массива без дополнительных спецификаторов и модификаторов имеет два формата:

Тип ИмяМассива[ВыражениеТипаКонстанты];

или

Тип ИмяМассива[];

ИмяМассива – идентификатор массива.

Тип – тип элементов объявляемого массива. Элементами массива не могут быть функции, фйлы и элементы типа void.

ВыражениеТипаКонстанты – задает количество элементов (размерность) массива. Выражение константного типа вычисляется на этапе компиляции. Данное константное выражение может быть опущено в случаях если:

· при объявлении массив инициализируется;

· массив объявлен как формальный параметр функции;

· массив объявлен как ссылка на массив, явно определенный в другом файле.

Например:

1) int a[100]; //массив из 100 элементов целого типа

2) double d[14]; // массив из 14 элементов типа double

3) char s[]="Программирование"; //символьный массив

4) int t=5, k=8;

float wer[2*t+k];

//массив из 2*t+k элементов вещественного типа

5) int sample[853];

/*массив из элементов sample[0], sample[1],

sample[2],...,sample[852] типа int*/

равносильно объявлению

const int N_max=853;

int sample[N_max];

равносильно объявлению

#define N_max 853

...

int sample[N_max];

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

 

Термином «инициализация» обозначают возможность задать начальные значения элементов массива без программирования соответствующих действий. Например, не прибегая к программным средствам типа присваивания значений в цикле или считывания данных из внешнего источника (файл, клавиатура, блок данных).

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

Например:

float t[5]={1.0, 4.3, 8.1, 3.0, 6.74};

char b[7]={'П','р','и','в','е','т'};

/*в данных примерах длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках*/

int d[10]={1, 2, 3};

char a[10]="Привет";

/*в данных примерах определяется значение только заданных переменных d[0],d[1],d[2] и a[0],a[1],...,d[9], остальные элементы не инициализируются*/

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

Пусть необходимо проинициализировать массивы для создания таблицы сообщений об ошибках:

char e1[12] = "read error\n";

char e2[13] = "write error\n";

char e3[18] = "cannot open file\n";

Очевидно, что подсчитывать «вручную» количество символов в каждом сообщении для подсчета размерности массивов очень трудоемко. Однако можно заставить С++ автоматически определить размеры этих массивов с помощью инициализации безразмерных массивов. Для этого в операторе инициализации не надо указывать размер массива, и С++ автоматически создаст массив, который сможет содержать присутствующий инициализатор. Используя этот подход, получим следующую таблицу сообщений:

char e1[] = "read error\n";

char e2[] = "write error\n";

char e3[] = "cannot open file\n";

Компилятор С++ сам сформирует нужное значение по количеству инициализирующих данных. В нашем случае под массив e2 будет отведено 13 байтов, включая последний байт с нулевым кодом, завершающий каждую строку. Оператор

printf("%s имеет длину, равную %d\n",e2,sizeof (e2));

выведет на экран

write error

имеет длину, равную 13

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

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 724; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.