Массивы в C (часть 1)

Массивы — очень полезные сущности, особенно в тех случаях, когда необходимо под одним именем объединить группы переменных одного и того же типа, обращаться к таким переменным можно через целочисленный индекс. Например, всем известная игра крестики нолики может быть представлена в виде массива. Размер поля — 3*3 клетки (левая верхняя ячейка может быть нулевым элементом, а правая нижняя клетка 8-м элементом массива). На самом деле, массивы — это самый эффективный способ для хранения большого количества однотипной информации под одним и тем же названием. Массивы могут иметь абсолютно любой тип данных, включая структуры и классы.

Массив можно представить как набор ячеек:

[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]

Каждая пара квадратных скобочек — это элемент массива, в каждом элементе массива можно хранить отдельное значение.

Пора приступить к изучению синтаксиса объявления массива:

int instanceArray[10]; // мы объявили массив

Мы только что объявили целочисленный массив размером 10 ячеек (мест, в которых значения массива хранятся). Чтобы обратиться к конкретному элементу массива, нужно просто указать имя массива и в квадратных скобках — порядковый номер. Единственно, вам следует знать, что на самом деле первый элемент массива имеет индекс — 0, тогда индекс последнего элемента равен размеру массива минус один. Например, индексы для массива из 10 элементов будут соответствовать этому диапазону: от 0 до 9. Будьте осторожны, никогда не выходите за пределы массива, это может привести к непредсказуемым ошибкам.

Но как вы можете применить только что полученные знания? Допустим, вам нужно сохранить строку, но язык Cи не имеет встроенный типа данных для строк, в таком случае мы можем воспользоваться массивом. Например:

char string[10];

Этот код позволит нам объявить массив символов из 10 элементов. И мы сможем сохранить в этот массив данные, которые введет пользователь. Первый входной символ сохраниться в нулевую ячейку, второй символ — в 1-ю ячейку и т. д. Таким образом работать со строками — сравнительно легко, потому что это позволяет работать со строками любой длинны и вся строка хранится в одной переменной. А теперь представьте ситуацию, когда пришлось бы хранить строку не в массиве, а в десятках переменных — это не очень удобно. Кроме того, с массивами очень легко работать в цикле, поочереди перебирая каждый элемент массива:

char string[10]; // символьный массив на 10 элементов

scanf( "%s", string ); // использование scanf для ввода строки - это очень хороший способ
int ct = 0;
for ( ct = 0; ct < 10; ++ct )
{
    if ( string[ct] == 'a' )
    {
        printf( "Вы ввели символ a!\n" );
    }
}

Давайте посмотрим, что в этой программе происходит. Функция scanf() считывает вводимую пользователем строку. Первый её параметр — %s говорит о том, что необходимо считать строку. Во втором параметре мы не используем амперсанд, так как второй параметр это указатель на первый элемент массива string.  То есть имя массива — это указатель на первый элемент массива, запомните это. Так что мы просто передаем массив непосредственно в scanf() без использования амперсанда и это работает прекрасно.

Кроме того, обратите внимание, что для доступа к элементу массива, мы просто используем квадратные скобки, внутри которых ставим значение, которое нас интересует. В данном случае, мы перебираем элементы от 0 до 9 и проверяем каждый элемент на равенство символу — a. Обратите внимание, что в данном примере есть один не маловажный момент, если пользователь введет строку размером — более 10 символов, то вся строка не поместится в массив и часть строки будет отброшена. Но вы пока на это не обращайте внимание, более подробно работу строк мы рассмотрим в следующем уроке.

Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: Marienko L.
Дата: 31.01.2014
Поделиться:

Комментарии

  1. avraal

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <math.h>
    
    int main()
    {
        setlocale(LC_ALL, "rus");
    
        int mas[10];
        int i, sum;
        sum = 0;
        for(i = 0; i < 10; i++)
        {
            printf("Введите число: ");
            scanf("%d", mas);
            if(mas[i] >= 0)
            {
                sum = sum + 1;
            }
        }
        printf("Количество позитивных чисел: %d", sum);
        return 0;
    }

    Если я после запуска ввожу числа от 1 до 10, то пишет, что положительных чисел 8
    В чем ошибка?

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.