Программирование >>  Инициализация объектов класса, структура 

1 ... 35 36 37 [ 38 ] 39 40 41 ... 395


int main() {

const int array size = 10; int ia[ array size ];

for ( int ix = 1; ix <= array size; ++ix ) ia[ ia ] = ix;

...

значением индекса. Найдите допущенные ошибки:

const int array size = 7; int ia1[] = { 0, 1, 2, 3, 4, 5, 6 };

int main() {

int ia3[ array size ];

for ( int ix = 0; ix < array size; ++ix ) ia2[ ix ] = ia1[ ix ];

return 0;

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

int someVal, get index();

типа. Например:

ia2[ get index() ] = someVal;

Подчеркнем, что язык С++ не обеспечивает контроля индексов массива - ни на этапе компиляции, ни на этапе выполнения. Программист сам должен следить за тем, чтобы индекс не вышел за границы массива. Ошибки при работе с индексом достаточно распространены. К сожалению, не так уж трудно встретить примеры программ, которые компилируются и даже работают, но тем не менее содержат фатальные ошибки, рано или поздно приводящие к краху.

Упражнение 3.22

(a) int ia[ buf size ]; (d) int ia[ 2 * 7 - 14 ]

(b) int ia[ get size() ]; (e) char st[ 11 ] = fundamental ;

Какие из приведенных определений массивов содержат ошибки? Поясните.

i (c) int ia[ 4 * 7 - 14 ];

Упражнение 3.23

Следующий фрагмент кода должен инициализировать каждый элемент массива



int ia[ 4 ][ 3 ] = {

{ 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 },

{ 9, 10, 11 }

массивы тоже могут быть инициализированы: };

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

int ia[4][3] = { 0,1,2,3,4,5,6,7,8,9,10,11 };

Следующее определение инициализирует только первые элементы каждой строки. Оставшиеся элементы будут равны нулю:

int ia[ 4 ][ 3 ] = { {0}, {3}, {6}, {9} };

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

int ia[ 4 ][ 3 ] = { 0, 3, 6, 9 };

При обращении к элементам многомерного массива необходимо использовать индексы для каждого измерения (они заключаются в квадратные скобки). Так выглядит

int main() {

const int rowSize = 4; const int colSize = 3; int ia[ rowSize ][ colSize ];

for ( int = 0; i < rowSize; ++i ) for ( int j = 0; j < colSize; ++j ) ia[ i ][ j ] = i + j j;

инициализация двумерного массива с помощью вложенных циклов:

3.9.1. Многомерные массивы

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

int ia[ 4 ][ 3 ];

Первая величина (4) задает количество строк, вторая (3) - количество столбцов. Объект ia определен как массив из четырех строк по три элемента в каждой. Многомерные



первого элемента:

&ia[0]

оба важения возвращают перв элемент

*ia;

Аналогично обратиться к значению первого элемента массива можно двумя способами:

ia[0];

Чтобы взять адрес второго элемента массива, мы должны написать:

&ia[1];

Как мы уже упоминали раньше, выражение

ia+1;

также дает адрес второго элемента массива. Соответственно, его значение дают нам

*(ia+1);

следующие два способа:

ia[1];

Конструкция

ia[ 1, 2 ]

является допустимой с точки зрения синтаксиса С++, однако означает совсем не то, чего ждет неопытный программист. Это отнюдь не объявление двумерного массива 1 на 2. Агрегат в квадратных скобках - это список выражений через запятую, результатом которого будет последнее значение 2 (см. оператор занятая в разделе 4.2). Поэтому объявление ia[1,2] эквивалентно ia[2]. Это еще одна возможность допустить ошибку.

3.9.2. Взаимосвязь массивов и указателей

Если мы имеем определение массива:

int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };

то что означает простое указание его имени в программе?

Использование идентификатора массива в программе эквивалентно указанию адреса его



1 ... 35 36 37 [ 38 ] 39 40 41 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика