|
Программирование >> Инициализация объектов класса, структура
void mumble () { Points pt3d = point3d; правильно: pt2d == 3 ошибка: pt3w инициализируется типом int Points pt3w = 3; / ошибка: polygon :)t3w = polygon; pt3w = правильно: оба объекта типа Points pt3w = pt3d; Однако в арифметических выражениях перечисление может быть автоматически const int array size = 1024; правильно: pt2w преобразуется int преобразовано в тип int. Например: int chunk size = array size * pt2w; 3.9. Тип массив Мы уже касались массивов в разделе 2.1. Массив - это набор элементов одного типа, доступ к которым производится по индексу - порядковому номеру элемента в массиве. Например: int ival; определяет ival как переменную типа int, а инструкция int ia[ 10 ]; задает массив из десяти объектов типа int. К каждому из этих объектов, или элементов массива, можно обратиться с помощью операции взятия индекса: ival = ia[ 2 ]; присваивает переменной ival значение элемента массива ia с индексом 2. Аналогично ia[ 7 ] = ival; присваивает элементу с индексом 7 значение ival. Определение массива состоит из спецификатора типа, имени массива и размера. Размер задает количество элементов массива (не менее 1) и заключается в квадратные скобки. Размер массива нужно знать уже на этапе компиляции, а следовательно, он должен быть константным выражением, хотя не обязательно задается литералом. Вот примеры правильных и неправильных определений массивов: int main() { = 10; const int array size = int ia[ array size ]; for ( int ix = 0; ix < array size; ++ ix ) ia[ ix ] = ix; массива: При определении массив можно явно инициализировать, перечислив значения его const int array size = 3; элементов в фигурных скобках, через запятую: int ia[ array size ] = { 0, 1, 2 }; Если м1 явно указ1ваем список значений, то можем не указывать размер массива: массив размера 3 компилятор сам подсчитает количество элементов: int ia[] = { 0, 1, 2 }; extern int get size(); buf size и max files константы const int buf size = 512, max files = 20; int staff size = 27; правильно: константа char input buffer[ buf size ]; правильно: константное выражение: 20 - 3 char *fileTable[ max files-3 ]; ошибка: не константа double salaries[ staff size ]; ошибка: не константное важение int test scores[ get size() ]; Объекты buf size и max files являются константами, поэтому определения массивов input buffer и fileTable правильны. А вот staff size - переменная (хотя и инициализированная константой 27), значит, salaries[staff size] недопустимо. (Компилятор не в состоянии найти значение переменной staff size в момент определения массива salaries.) Выражение max files-3 может быть вычислено на этапе компиляции, следовательно, определение массива fileTable[max files-3] синтаксически правильно. Нумерация элементов начинается с 0, поэтому для массива из 10 элементов правильным диапазоном индексов является не 1 - 10, а 0 - 9. Вот пример перебора всех элементов ia ==> { 0, 1, 2, 0, 0 } const int array size = 5; в списке больше значений, компилятор выводит сообщение об ошибке: int ia[ array size ] = { 0, 1, 2 }; Символьный массив может быть инициализирован не только списком символьных значений в фигурн1х скобках, но и строковым литералом. Однако между этими i const char cal[] = {C, +, + }; способами есть некоторая разница. Допустим, const char cal2[] = C++ ; Размерность массива ca1 равна 3, массива ca2 - 4 (в строковых литералах учит1вается ошибка: строка Daniel состоит из 7 элементов завершающий нулевой символ). Следующее определение вызовет ошибку компиляции: const char ch3[ 6 ] = Daniel ; Массиву не может быть присвоено значение другого массива, недопустима и инициализация одного массива другим. Кроме того, не разрешается использовать массив const int array size = 3; int ix, jx, kx; правильно: массив указателей типа int* int *iar [] = { &ix, &jx, &kx }; error: массивы ссылок недопустимы int &iar[] = { ix, jx, kx }; int main() { int ia3{ array size ]; правильно ошибка: встроенные массивы нельзя копировать ia3 = ia; return 0; ссылок. Вот примеры правильного и неправильного употребления массивов: Чтобы скопировать один массив в другой, придется проделать это для каждого элемента по отдельности: Когда явно указан! и размер, и список значений, возможны три варианта. При совпадении размера и количества значений все очевидно. Если список значений короче, чем заданный размер, оставшиеся элементы массива инициализируются нулями. Если же
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |