Домашняя страница библиотеки_c AVR

Синтаксис языка C

Библиотека языка C GNU glibc

 Страницы развития библиотеки_с AVR

Главная страница

Инструкция пользователя

Содержание библиотеки_c

Часто задаваемые вопросы

Содержание по алфавиту

Демонстрационные проекты


 

Массивы и строки

Массив — это тип данных, который используется для представления после­довательности однотипных значений. Массивы объявляются подобно обычным переменным, с указанием в квадратных скобках размерности (количества элемен­тов в массиве):

int   digits[10];     //Массив  из  десяти  элементов   типа   int

char   str[10];       //Массив  из  десяти  символов   (строка)

Доступ к элементам массива реализуется с помощью индекса (порядкового номера элемента, начиная с 0):

digits[0]   =   0;

digits[1]   =   1;

str[0]   =   'А';

str[l]   =   'В';

ПРИМЕЧАНИЕ

По сути, имя массива это указатель на его первый элемент. Так в последнем примере, оператор str[0] = ‘A’; можно было бы заменить оператором *str = ‘A’; а оператор str[1] = ‘B’ – оператором *(str + 1) = ‘B’.

 

Зачастую гораздо удобнее инициализировать массив непосредственно при его объявлении, например:

int   digits [10]    =   {0,    1,   2,   3,   4,   5,    б,   7,   8,    9};

char  str[10]   =   {'Т',    'h',    'e',    '    ',    'v',    'i',    'n',    'e',    'd'};

int   n;

char   с;

n = digits[2];      //n =2

с = str[l];            //c = 'h'

ВНИМАНИЕ!

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

с = str[l2]; то на этапе компиляции ошибки не возникнет, но в ходе выполнения программы переменной с будет присвоено значение "13-го", несуществующего элемента массива, то есть извлечено содержимое области памяти, адрес которой на 12 элементов смещен относительно начального адреса массива.

 

Строки

Строка в C — это массив типа char. Выше был рассмотрен пример объявле­ния такого массива, соответствующего строке "The line". Это объявление можно было бы выполнить и с помощью строкового литерала:

char str[10] = "The line";

Однако в таком случае следует помнить, что компилятор неявно завершает строковые литералы символом '\0', и, таким образом, реальная длина строки больше на 1. Это следует учитывать, чтобы при инициализации массива не выйти за его пределы.

При инициализации строк размерность массива можно явно не указывать:

char   str[]   =   "The   line";

В этом случае компилятор определит размерность самостоятельно. (Это пра­вило применимо и к инициализации любых других массивов.)

 

Многомерные массивы

Язык С допускает использование многомерных массивов, то есть массивов, элементами которых являются массивы. Примеры объявления таких массивов:

int   a2[10][2];        //Двухмерный массив   10x2

int   аЗ[3] [2] [5];   //Трехмерный  массив   3x2x5

Фактически, все элементы многомерного массива хранятся в памяти последо­вательно, поэтому представленные ниже примеры инициализации аналогичны:

int   а[2][3]   =   {    {1,   2,   3},

  {4,   5,    6}    };

и

int   а[2] [3]   =   {   1,   2,   3,   4,   5,    6   } ;

Для доступа к элементам многомерного массива используются индексы по каждой из размерностей или операции разыменования указателя. Например, что­бы извлечь в некоторую переменную n цифру 4 из представленного выше массива а, можно воспользоваться одним из двух вариантов:

n = а[1][0];   //Извлекаем элемент  из   "строки"   1   (вторая),     //"столбца"   0   (первый),   то   есть   -   цифру  4

n = *(а+3);   //а-  указатель   на   первый   элемент  массива, //следовательно а + 3 - указатель на 4-й элемент.

Hosted by uCoz