Поиск по сайту:

Учебник по программированию на C для Linux. Часть 24. Многомерные массивы


На этой странице

  1. Многомерные массивы в C
  2. Заключение

Если вы следуете этой постоянной концепции массивов. Для быстрого обновления массивы используются для хранения нескольких значений одного типа в непрерывном хранилище.

Многомерные массивы в 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;
}

Заключение

В этом руководстве мы расширили существующее понимание массивов, обсудив концепцию многомерных массивов. Вам рекомендуется опробовать примеры, используемые в этом руководстве, в вашей системе (а также создать новые), чтобы лучше понять, как работают эти массивы. В случае каких-либо сомнений или вопросов, оставьте комментарий ниже.