Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
17.04.2015
Размер:
42.1 Кб
Скачать

6. Задание структуры с помощью оператора typedef.

От обязательногоиспользования ключевого слова struct можно отказаться, если описывать структуру, используя оператор объявления типа typedef в следующем виде:

typedef struct [первичное имя типа] {...} имя типа;

Первичное имя типа, указываемое перед перечнем полей структуры является необязательным и указывается редко. Как правило, первичное имя типа имеет тот же идентификатор, что и основное имя типа, но начинается со знака подчеркивания.

Структура, содержащая информацию о книге (ФИО автора, название книги, год издания):

typedef struct {

char author[20], title[50];

unsigned year;

} BOOK;

Объявление переменной данного типа:

BOOK book = {"А. Дюма”,”Три мушкетера”, 1986}; От обязательногоиспользования ключевого слова struct можно отказаться, если описывать структуру, используя оператор объявления типа typedef в следующем виде:

typedef struct [первичное имя типа] {...} имя типа;

Первичное имя типа, указываемое перед перечнем полей структуры является необязательным и указывается редко. Как правило, первичное имя типа имеет тот же идентификатор, что и основное имя типа, но начинается со знака подчеркивания.

Структура, содержащая информацию о книге (ФИО автора, название книги, год издания):

typedef struct {

char author[20], title[50];

unsigned year;

} BOOK;

Объявление переменной данного типа:

BOOK book = {"А. Дюма”,”Три мушкетера”, 1986};

7. Обращение к полям структуры.

Доступ к отдельным членам структуры осуществляется с помощью оператора . (который обычно называют оператором точка или оператором доступа к члену структуры).

имя_переменной.имя_поля

Сначала указывается имя переменной структуры, а затем, через точку, имя поля. С точки зрения языка С при таком обращении к полю его значение может выступать как LValue, так и RValue значения.

Например, в следующем выражении полю zip в уже объявленной переменной-структуре addr_info присваивается значение ZIP-кода, равное 12345:

addr_info.zip = 12345;

Этот отдельный член определяется именем объекта (в данном случае addr_info), за которым следует точка, а затем именем самого этого члена (в данном случае zip). В общем виде использование оператора точка для доступа к члену структуры выглядит таким образом:

имя-объекта.имя-члена

Поэтому, чтобы вывести ZIP-код на экран, напишите следующее:

printf("%d", addr_info.zip);

Будет выведен ZIP-код, который находится в члене zip переменной-структуры addr_infо.

Точно так же в вызове gets() можно использовать массив символов addr_infо.name:

gets(addr_info.name);

Таким образом, в начало name передается указатель на символьную строку.

Так как name является массивом символов, то чтобы получить доступ к отдельным символам в массиве addr_info.name, можно использовать индексы вместе с name. Например, с помощью следующего кода можно посимвольно вывести на экран содержимое addr_info.name:

for(t=0; addr_info.name[t]; ++t)

putchar(addr_info.name[t]);

Обратите внимание, что индексируется именно name (а не addr_info). Помните, что addr_info — это имя всего объекта-структуры, a name — имя элемента этой структуры. Таким образом, если требуется индексировать элемент структуры, то индекс необходимо указывать после имени этого элемента.

Использование элементов структуры в выражениях.

Вычисление длины окружности, заданной переменной cir типа Circle:

double length = 2.0*3.1415*cir.radius;

8. Ввод вывод информации в структуре.

Ввод информации о студенте в переменную st типа Student:

scanf("%s %s %s %u %lf”, &st.surname, &st.name,

&st.patronymic, &st.number, &st.rate);

Вывод на экран списка группы, заданной в переменой gr типа Group:

printf("Группа: %s\n”,gr.name);

for(unsigned i=0;i printf("%2u: %15s %15s %15s %6u %.1lf\n”, i+1, gr.list[i].surname, gr.list[i].name, gr.list[i].patronymic, gr.list[i].number, gr.list[i].rate);

printf("%d,%d", pt.x, pt.y);

Соседние файлы в папке Л№23.Структуры.ООП