Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Двухмерные массивы. Массивы строк.

Поиск
Двухмерные массивы Объявление двумерного массива имеет вид:               тип <имя массива>имя[размер 1][размер 2];Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного –три и т.д. Отметим, что в языке С первый элемент массива имеет индекс равный 0. Примеры:                int a[2][3]; /* представлено в виде матрицы                                                                                                 a[0][0] a[0][1] a[0][2]                                                                                                 a[1][0] a[1][1] a[1][2] */               double b[10]; // вектор из 10 элементов имеющих тип double               int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } };В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигурные скобки, соответствуют строкам массива, в случае отсутствия скобок инициализация будет выполнена неправильно. Пример:               int s[2][3];                Если при обращении к некоторой функции написать s[0], то будет передаваться нулевая строка массива s.

Вы можете объявить двухмерный массив следующим образом:
int matrix[5][8];
matrix можно назвать массивом массивов. В данном случае матрица состоит из 5 строк и 8 столбцов. 

Выражение matrix[0] обозначает первую строку, выражение matrix[1] – вторую и т.д.

Чтобы получить доступ к элементам массива, используйте две пары квадратных скобок. Оператор
matrix[4][2]=5;
присвоит значение 5 третьему элементу пятой строки матрицы.

 Пример Ввода и вывода двумерного массива
#include <stdio.h>
void main(){
               int A[100][100]; // массив 100х100
               int i,j; // индексы для перемещения по массиву
               int n; // кол-во строк
               int m; // кол-во столбцов
               // ввод размеровматрицы
               printf("input emount of rows");
               scanf("%d",&n);
               printf("input emount of collomns");
               scanf("%d",&m);
               // ввод значений матрицы
               for (i=0;i<n;i++)
                                    for (j=0;j<n;j++){
                                                        printf("input A[%d][%d]",i,j);
                                                        scanf("%d",&A[i][j]);
                                    }
               // вывод значение матрицы
                                    for (i=0;i<n;i++){
                                    for (j=0;j<n;j++)
                                                        printf("%d ",A[i][j]);
                                                        printf("\n");
                                    }
} Массивы строк Пример объявления символьного массива.                char str[] = "объявление символьного массива"; Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью ’\0’.

 

19. Инициализация массивов Инициализация массива – этоприсваивание элементам массива некоторых начальных значений.Если размер массива не известен, то он считается равным числу инициализаторов, при этом тип его становится завершенным. Если размер массива известен, то число инициализаторов не должно превышать числа его элементов; если инициализаторов меньше, оставшиеся элементы обнуляются.Самый простой способ инициализации следцющий: в процессе объявления массива можно указать в фигурных скобках список инициализаторов:               float arr[6] = {1.1, 2.2, 3.3, 4.0, 5, 6};               int a[3][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …, 15};               int a[3][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};Количество инициализаторов не обязано совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся значения элементов неопределенны. Для доступа к элементам массива после его имени указывается номер элемента (индекс) в квадратных скобках.Иногда инициализация многомерных массивов бывает очень полезной. Листинг 1 демонстрирует типичное использование инициализированного многомерного массива для запоминания названий месяцев.
Листинг 1. months (запоминание названий месяцев в массиве):
#include <stdio.h>
#define NUMMONTHS 12
char months[NUMMONTHS][4] = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"
};
main()
{
int month;
for(month=0; month<NUMMONTHS; month++)
printf(?%s\n?, months[month]);
return 0;
}
­­­­­­­­
Объявленный в строке 5 массив months (месяцы) запоминает 12 трехсимвольных строк, оканчивающихся нулевым байтом. Выражение months[0] относится к Jan, months[1] – Feb и т. д. Такие выражения наталкивают нас на восприятие массива months как одномерного.  Но на самом деле он имеет два измерения. Например, выражение months[1][2] ссылается на символ b строки “Feb”.

 

20.способы доступа к элементам массива

Доступ к элементам массива может производиться двумя различными способами.

Первый способ связан с применением обычных индексных выражений в квадратных скобках, например:
array[18] = 3 или array[i + 3] = 9. При данном способе доступа записываются два выражения. Второе выражение должно быть заключено в квадратные скобки. Одно из данных выражений должно являться указателем, а второе — выражением целого типа. Последовательность записи данных выражений может быть произвольной, однако в квадратных скобках следует записывать выражение, следующее вторым. Поэтому записи array[16] и 16[array] будут являться одинаковыми и обозначающими элемент массива с номером шестнадцать. Указатель, который используется в индексном выражении, не всегда является константой, которая указывает на какой-либо массив, это может быть и
переменная. Например, после выполнения присваивания ptr = array доступ к шестнадцатому элементу массива можно получить, применяя указатель ptr в форме ptr[16] или 16[ptr].

Второй способ доступа к элементам массива связан с применением адресных выражений и операции разадресации в виде *(array+16) = 3 или *(array+i+2) = 7. При данном способе доступа адресное выражение соответствует адресу шестнадцатого элемента массива, тоже может быть записано различными способами: *(array+16) или *(16+array).

При работе на компьютере первый способ приводится ко второму, т. е. индексное выражение стано- вится адресным. Для ранее рассмотренных примеров array[16] и 16[array] преобразуются в *(array+16).

Для доступа к начальному элементу массива, т. е. к элементу с нулевым индексом, можно применять просто значение указателя array или ptr. Любое из присваиваний
*array = 2;
array[0] = 2;
*(array+0) = 2;
*ptr = 2;
ptr[0] = 2;
*(ptr+0) = 2;
присваивает начальному элементу массива значение 2, но быстрее всего выполнятся присваивания *array = 2 и *ptr = 2, так как в них не требуется выполнять операции сложения.


 



Поделиться:


Последнее изменение этой страницы: 2021-08-16; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.241.235 (0.005 с.)