Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Программирование_1.doc
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
501.25 Кб
Скачать

5.3.Строки

Массив из символов (элементов типа char) часто называется строкой. Строки позволяют хранить фразы на естественном языке, например, на русском.

При выводе на экран и других операциях со строками нужно знать, сколько символов хранит строка. Например, если у нас есть массив для хранения имени пользователя, состоящий из 25 символов, то для пользователя «Вася» нужно при печати выводить только первые 4 символа.

Наиболее удобным оказалось хранить информацию о реальной длине строки прямо в массиве символов. Для этого используется специальный символ обозначаемый как «\0». Функция, работающая со строкой, например, печатающая ее, будет обрабатывать символы по порядку, пока не встретит символ «\0».

Для удобства записи массива символов можно использовать строковые константы. Строковые константы представляют собой набор символов, заключенных в двойные кавычки. Например, следующее объявление создаст массив из 7 символов:

char a[] = “Привет”;

Символ a[0] будет равен 'П', символ a[5] будет равен 'т', а символ a[6] будет равен '\0'. Обратите внимание, что когда мы записываем символы в двойных кавычках, то это будет строка, заканчивающаяся '\0', а если в одинарных – то это один символ. Так, запись “П” будет состоять из 2 символов, а запись 'Пр’ вызовет ошибку.

Для удобства работы со строками функции форматированного ввода-вывода (printf и scanf) содержат специальный спецификатор строки – «%s». Например, напечатать объявленную выше строку можно следующим образом:

printf(“%s”, a);

Для работы со строками в языке С есть целая стандартная библиотека – string.h. Например, следующая функция копирует (переписывает) строку scr в строку dest:

strcpy(dest, scr);

С полным списком функций этой библиотеки можно ознакомиться в [1].

5.4.Структуры

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

В этом случае поможет еще один элемент языка С – структура (в других языках аналогичный элемент часто называется запись). В отличие от массива структура может содержать переменные произвольного типа. Поэтому перед использованием структуру нужно объявить, т.е. описать те переменные, которые она содержит. Для товара объявить структуру можно следующим образом:

struct tovar

{

char name[20];

int price;

};

Это объявление сообщит компилятору, что структура tovar содержит поля name и price. Компилятор вычислит необходимый для структуры объем памяти и смещение полей относительно начала структуры.

Можно сказать, что объявление структуры фактически создало новый тип. После этого объявления можно заводить переменные, имеющие тип объявленной структуры. Например:

tovar a,b;

После таких объявлений компилятор отведет под переменные a и b необходимое место в памяти.

При объявлении структуру можно сразу инициализировать. Инициализация структуры аналогична инициализации массива:

tovar a={”мыло”, 100};

Поскольку поля в структуре занимают различный объем, для обращения к ним нельзя использовать операцию индексирования. Для обращения к полю используют операцию обращения к полю, которая обозначается точкой. Например:

a.price = 10;

Для этого примера компилятор создаст код, который прибавит к адресу структуры a смещение поля price, вычисленному при объявлении структуры. По полученному адресу и будет записано число 10 – цена товара. Аналогичным образом происходит обращение к полю и в случае, если нужно получить его значение.