Учебник по программированию на C для Linux. Часть 24. Многомерные массивы
На этой странице
- Многомерные массивы в C
- Заключение
Если вы следуете этой постоянной концепции массивов. Для быстрого обновления массивы используются для хранения нескольких значений одного типа в непрерывном хранилище.
Многомерные массивы в C
Например, ниже показан массив целых чисел, способный хранить 5 чисел.
int arr[5]
К любому значению, хранящемуся в массиве, можно легко получить доступ, используя имя массива и соответствующее значение индекса. Поскольку индексы начинаются с 0, скажем, если вы хотите получить доступ ко второму элементу в массиве, вы можете сделать это следующим образом:
arr[1]
Следующая программа принимает 5 целых чисел от пользователя в качестве входных данных, сохраняет их в массиве, а затем выводит обратно пользователю.
#include <stdio.h>
int main()
{
int arr[5],i;
printf("Enter 5 integer values\n");
for(i=0;i<5;i++)
scanf("%d",&(arr[i]));
printf("You entered the following values:\n");
for(i=0;i<5;i++)
printf("%d\n",arr[i]);
return 0;
}
Теперь этот тип массива известен как одномерный массив. Да, это означает, что существуют и многомерные массивы — двумерные массивы, трехмерные массивы и так далее. Например, ниже приведен двумерный массив:
int arr[2][3]
Вы можете визуализировать этот массив как двумерную таблицу чисел с 2 строками и 3 столбцами, например:
x x x
x x x
Таким образом, этот массив может содержать всего 6 элементов. Стоит отметить, что общее количество элементов, которые может содержать массив, может быть легко вычислено путем умножения индексов в объявлении массива. Например, в случае arr емкость массива можно вычислить, выполнив 2x3, что равно 6.
Переходя к части инициализации, двумерный массив, такой как arr, можно инициализировать следующим образом:
int arr [2][3] = {1,2,3,4,5,6}
Поскольку приведенная выше инициализация затрудняет визуализацию этих значений в двумерном массиве, есть другой (читай: лучший) способ, который вы можете выбрать. Вот:
int arr [2][3] = { {1,2,3}, {4,5,6} };
Итак, теперь легко представить, что числа 1,2,3 находятся в одном ряду, а 4,5,6 — в другом. Ну вот:
1 2 3
4 5 6
Что касается того, как работать с двумерным массивом в C, ниже приведена небольшая программа, которая принимает эти 6 значений от пользователя, сохраняет их в двумерном массиве arr, а затем, наконец, выводит их обратно пользователю:
#include <stdio.h>
int main()
{
int arr[2][3],i,j;
printf("You are about to enter values for a 2x3 array\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("\n Enter value to be stored at row %d and column %d :: ",i,j);
scanf("%d",&arr[i][j]);
}
}
printf("\n You entered the following values:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("\n Row %d and column %d = %d\n",i,j,arr[i][j]);
}
}
return 0;
}
И вот вывод:
You are about to enter values for a 2x3 array
Enter value to be stored at row 0 and column 0 :: 1
Enter value to be stored at row 0 and column 1 :: 2
Enter value to be stored at row 0 and column 2 :: 3
Enter value to be stored at row 1 and column 0 :: 4
Enter value to be stored at row 1 and column 1 :: 5
Enter value to be stored at row 1 and column 2 :: 6
You entered the following values:
Row 0 and column 0 = 1
Row 0 and column 1 = 2
Row 0 and column 2 = 3
Row 1 and column 0 = 4
Row 1 and column 1 = 5
Row 1 and column 2 = 6
Итак, это была некоторая основная информация о двумерных массивах. Как насчет трехмерных массивов? Ну, в тех же строках вы также можете определять и инициализировать трехмерные массивы. Вот пример:
int arr[2][3][4]
Так как же можно визуализировать этот массив? Что ж, подумайте о трехмерном мире (мире, в котором мы живем), а затем визуализируйте три измерения, перпендикулярные друг другу. Вот как вписываются три измерения этого массива.
Имея емкость 24 элемента (2x3x4), этот массив можно инициализировать следующим образом:
int x[2][3][4] = { { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }, { {13,14,15,16}, {17,18,19,20}, {21,22,23,24} } };
А вот программа на C, использующая трехмерный массив:
#include <stdio.h>
int main()
{
int arr[2][3][4],i,j,k;
printf("You are about to enter values for a 2x3x4 array\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
printf("\n Enter value to be stored at arr[%d][%d][%d] :: ",i,j,k);
scanf("%d",&arr[i][j][k]);
}
}
}
printf("\n You entered the following values:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
printf("\n arr[%d][%d][%d] = %d\n",i,j,k,arr[i][j][k]);
}
}
}
return 0;
}
Заключение
В этом руководстве мы расширили существующее понимание массивов, обсудив концепцию многомерных массивов. Вам рекомендуется опробовать примеры, используемые в этом руководстве, в вашей системе (а также создать новые), чтобы лучше понять, как работают эти массивы. В случае каких-либо сомнений или вопросов, оставьте комментарий ниже.