|
Программирование >> Структурное программирование
> Г Введите ключ - число, находящееся между О и 28: 25 ; Индексы:
6 найден в элементе массива 3 Рис. 4.20. Двоичный поиск в сортированном массиве (часть 3 из 3)
Индекс столбца Индекс строки Имя массива Рис. 4.21. Двумерный массив с тремя строками и четырьмя столбцами Типичная ошибка программирования 4.9 Неправильная ссылка на элемент двумерного массива а[х] [у] как а[х,у]. На самом деле, а[х,у] воспринимается как а[у], потому что С++ оценивает выражение (со -держащее операцию последования - запятую) х , у просто как у (последнее из разделенных запятыми выражений). Многомернные массивы могут получать начальные значения в своих объявлениях точно так же, как массивы с единственным индексом. Например, двумерный массив Ь[2] [2] можно объявить и дать ему начальные значения таким образом: int b[2] [2] = { {1,2}, {3, 4} }; Значения группируются в строки, заключенные в фигурные скобки. Таким образом, элементы Ь[0] [0] и Ь[0] [1] получают начальные значения 1 и 2, а элементы Ь[1] [О] и Ь[1] [1] получают начальные значения 3 и 4. Если начальных значений в данной строке не хватает для их присвоения всем элементам строки, то остающимся элементам строки присваиваются нулевые начальные значения. Таким образом, объявление int b[2][2] = {{1,}, {3, Л]]; будет означать что Ь[0] [О] получает начальное значение 1, Ь[0] [1] получает начальное значение О, Ь[1][О] получает начальное значение 3 и Ь[1][1] получает начальное значение 4. Рисунок 4.22 демонстрирует присваивание начальных значений двумерным массивам в объявлениях. Программа объявляет три массива, каждый с тремя строками и тремя столбцами. Объявление array 1 имеет шесть начальных значений в двух подсписках. Первый подсписок присваивает начальные значения 1, 2 и 3 элементам первой строки массива; второй подсписок присваивает начальные значения 4, 5 и 6 элементам второй строки массива. Если фигурные скобки вокруг каждого подписка удалить из списка начальных значений arrayl, то компилятор автоматически присвоит первые начальные значения элементам первой строки, а следующие - элементам второй строки. Объявление аггау2 содержит пять начальных значений. Начальные значения присваиваются первой строке, затем второй строке. Любые элементы, которые не имеют явно заданных начальных значений, автоматически получают нулевые начальные значения, так что элемент аггау[1] [2] получит нулевое начальное значение. Объявление аггауЗ имеет три начальные значения в двух подсписках. Подсписок для первой строки явно присваивает начальные значения 1 и 2 первым двум элементам первой строки. Третий элемент автоматически получает нулевое начальное значение. Подсписок для второй строки явно присваивает начальное значение 4 первому элементу. Остальные два элемента автоматически получают нулевые начальные значения. Программа вызывает функцию printArray для вывода элементов каждого массива. Заметим, что описание функции указывает параметр - массив как int а[ ] [3]. Когда мы задаем как аргумент функции одномерный массив, скобки в списке параметров функции пусты. Размерность первого индекса многомерного массива также не требуется, но все последующие размерности индексов необходимы. Компилятор использует размерности этих индексов для определения ячеек в памяти элементов многомерных массивов. В памяти все элементы массива хранятся последовательно, независимо от количества индексов. В двумерном массиве первая строка хранится в памяти перед второй строкой. int arrayl[2][3] = !{1, 2, 3}, {4, 5, 6}}, array2[2][3] = { 1, 2, 3, 4, 5 ), аггауЗ [2] [3] = { {1, 2}, {4} } ; cout << Значения массива arrayl no строкам: << endl; printArray(arrayl); cout << Значения массива аггау2 по строкам: << endl; printArray{аггау2); i.. cout << Значения массива аггауЗ по строкам: << endl; .i > printArray(аггауЗ) ; return 0; void printArray(int a[][3]) { for (int i = 0; i <= 1; i++) { *; I for (int j = 0; j <= 2; j++) I cout a[i] [j] << ; . g cout << endl; Значения массива arrayl no строкгш: \ 12 3 . 4 5 6 i-j Значения массива аггау2 по строкам: к, 3 е- 4 5 0 а Значения массива аггауЗ по строкам: 12 0 4 0 0 Рис. 4.22. Присваивание начальных значений в многомерных массивах Наличие размерностей индексов в объявлении параметра дает возможность компилятору сообщить функции о том, как расположены элементы в массиве. В двумерном массиве каждая строка по существу является одномерным массивом. Чтобы определить местоположение элемента в некоторой строке, функция должна точно знать, сколько элементов находится в каждой строке, чтобы она смогла пропустить соответствующее количество ячеек памяти при обращении к массиву. Таким образом, при обращении к а[1] [2] функция знает, что для доступа ко второй строке (строка 1) нужно пропустить в памяти три элемента первой строки, а затем обратиться к третьему элементу этой строки (элементу 2). III Присваивание начальных значений в многомерных массивах #include <iostream.h> id printArray(int [][3]);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |