КАТЕГОРИИ: Архитектура-(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; Просмотров: 750; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |