Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабник по C.pdf
Скачиваний:
74
Добавлен:
01.06.2015
Размер:
876.9 Кб
Скачать

– 8 –

today.date=30;

gets(today.name);

с помощью указателей.

Впоследнем случае надо объявить указатель типа структуры и присвоить ему значение адреса структурной переменной; доступ к элементу этой переменной осуществляется через выражение

указатель -> имя элемента или (*указатель).имя элемента struct day today, *ptr; ptr=&today;

ptr->date=29;

gets( ptr->name); // gets, puts -функции ввода данных с клавиатуры и вывода puts((*(ptr.name));// значений на дисплей соответственно

Замечание 1. Иногда удобно ввести в шаблон имя переменной struct day {

int date; char name[10]; } today;

Замечание 2. В некоторых случаях целесообразно использовать оператор переименования типа – typedef. Например, применив

typedef struct { int year ; char *month; int dat;

char *day_week; } Data;

мы получим возможность делать в программе объявления вида Data day1;

2.9.МАССИВЫ СТРУКТУР

Объявление массива структур имеет следующий вид:

struct имя_шаблона имя_переменной[n];

Массив структур может быть проинициализирован.

struct day week[7]={{24, “понедельник”},{25, “вторник”},} {26, “среда”},{27,“четверг”}, {28, “пятница”}, {29, “суббота”}, {25, “воскресенье”}};

Первая структура массива имеет имя week[0], вторая – week[1] и т.д. Обращение к элементам массива следующее: week[0].date, week[0].name; Имя массива структур является указателем на этот массив.

2.10. МНОГОМЕРНЫЕ МАССИВЫ

Многомерный массив объявляется следующим образом:

[класс_памяти] тип имя [n1][n2]..[nm];

где m – число измерений массива, ni – число элементов в i-ом измерении.

Например, согласно объявлению int matr[3][4] двумерный массив целых чисел содержит три строки и четыре столбца.

© 1998 Калачев Д.П., Лутай В.Н.

– 9 – int matr[3][4]={ {1,2,3,5},{2,3,4,5}{4,5,6,7} };

Так же, как и в одномерном случае, имя многомерного массива является его адресом или, что то же самое, адресом его первого элемента. Из этого следует, что, добавив к имени массива соответствующее число адресных единиц, можно получить ссылку на любой элемент массива. Например, выражение (matr+1) указывает на элемент matr[0][1], выражение (matr+4) указывает на элемент matr[1][0]. Это означает, что *(matr+1) – содержи-

мое ячейки matr[0][1].

Рассмотрим следующие выражения : matr[0], matr[1], matr[2]. Первое указывает на 1-ый элемент 1-ой строки, второе – на 1-ый элемент 2-ой строки, третье – на 1-ый элемент 3- ой строки. Это обстоятельство позволяет определять двумерные массивы как одномерные массивы указателей, трехмерные массивы как двумерные массивы указателей и т.п. Напри-

мер

char *matr[3]={{"moon","ground","exit"}};

Здесь двумерный массив состоит из 3-х строк.

Ввод-вывод элементов массива может производиться как поэлементно, так и построчно.

Пример: main (){

char *symb[12];

for (i=0; i<12; i++){ gets(symb[i]);

...

}

...

for (i=0; i<12; i++){ puts(symb[i]);

...

}

}/* main */

Вязыке С допускаются достаточно сложные объявления :

int **ptr – двумерный массив ; ptr-указатель на указатель типа int;

int (*mas)[10] – указатель на 10-элементный массив;

int *mas[3][4] – 3 элементный массив указателей на 4 элементный массив типа int.

int(*buf )[3][4] – указатель на массив 3 на 4 типа int.

При составлении подобных объявлений надо помнить, что приоритет [] выше, чем у *, а приоритет () самый высокий.

2.11. ОБЪЕДИНЕНИЕ

Объединение (смесь) объявляется следующим образом:

union имя_шаблона {список элементов};

Пример:

union trans {

// занимает

2

байта

int

i;

double

n2;

// занимает

8

байтов

char

str[6]; // занимает

6

байтов

};

 

 

 

 

union trans table;

© 1998 Калачев Д.П., Лутай В.Н.