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

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


Итак, мы уже обсуждали концепцию переменных в программировании на C (здесь). Чтобы быстро обновить, переменная — это то, что может содержать значение определенного типа — это может быть целое число, символ или даже с плавающей запятой. Однако у переменных есть одно ограничение: они могут хранить только одно значение в любой момент времени.

Это означает, что если вы хотите хранить несколько значений, вам придется иметь дело с одинаковым количеством переменных. Например, если вы хотите, чтобы программа принимала от пользователя 10 целочисленных значений, а затем выводила их, то вы либо напишете это следующим образом:

#include <stdio.h>

int main()
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;
printf("Enter 10 integer values\n");
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
scanf("%d",&d);
scanf("%d",&e);
scanf("%d",&f);
scanf("%d",&g);
scanf("%d",&h);
scanf("%d",&i);
scanf("%d",&j);

printf("You entered the following values:\n");
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",e);
printf("%d\n",f);
printf("%d\n",g);
printf("%d\n",h);
printf("%d\n",i);
printf("%d\n",j);


return 0;
}

Или следующим образом:

#include <stdio.h>

int main()
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;

printf("Enter 10 integer values\n");
scanf("%d %d %d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);

printf("You entered the following values:\n");
printf("%d %d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i,j);


return 0;
}

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

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

int arr[10]

Итак, здесь int относится к типу массива значений, который будет хранить arr. Число 10 в квадратных скобках говорит о том, что вместимость arr составляет 10 значений. Теперь вот кусок кода, использующий этот массив:

#include <stdio.h>

int main()
{
int arr[10],i;

printf("Enter 10 integer values\n");

for(i=0;i<10;i++)
scanf("%d",&(arr[i]));

printf("You entered the following values:\n");

for(i=0;i<10;i++)
printf("%d\n",arr[i]);


return 0;
}

Обратите внимание, что мы уже обсуждали функции scanf и printf в одном из наших предыдущих руководств, поэтому вы можете обратиться к этим статьям, если хотите узнать о них больше.

Возвращаясь к массивам, вы заметили, что цикл for в приведенном выше коде начинается с i=0. Это связано с тем, что индексы массива (число в квадратных скобках) всегда начинаются с нуля. Итак, здесь, в нашем случае, arr[0] относится к первому значению, введенному пользователем, arr[1] относится ко второму значению и так далее до arr[9], которое относится к 10-му значению.

Также стоит упомянуть, что вы можете легко получить доступ к адресу памяти каждого значения, хранящегося в массиве. Это можно сделать, используя имя массива, в данном случае это arr. Поэтому, если вы используете в коде просто arr, то это не что иное, как адрес памяти первого элемента.

Точно так же, если вы хотите получить доступ к адресу памяти второго элемента, просто используйте arr+1. Для третьего элемента используйте arr+2 и т. д. и т. д. Следующий фрагмент кода и его вывод должны дать вам лучшее представление.

#include <stdio.h>

int main()
{
int arr[10],i;

printf("The address of first and second values are: %u %u\n", arr, arr+1);

return 0;
}

И вот вывод:

The address of first and second values are: 2904035888 2904035892

Как видите, разница в этих адресах составляет 4 байта, потому что одно целое значение занимает 4 байта в моей системе.

Здесь, в этом уроке, мы обсудили основы массивов. Обратите внимание, что мы привели только пример целочисленного массива. У вас также может быть массив других типов, например символы. Попробуйте примеры, которые мы использовали в этом уроке, и дайте нам знать в разделе комментариев ниже, если у вас есть какие-либо сомнения или вопросы.