Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИДЗ 1 Вариант 8.doc
Скачиваний:
13
Добавлен:
20.06.2014
Размер:
131.58 Кб
Скачать

1.3. Структуры

Оба языка и Паскаль, и Си позволяют определить унифицированные и неоднородные структуры данных.

В Паскале они называются записи(records), а в Си - структуры.

Формат для обоих:

Турбо Паскаль Турбо Си

type typedef struct {

<rname>=record <type><fnames>;

<fnames>:<type>; <type><fnames>;

<fnames>:<type>; ...

... <type><fnames>;

<fnames>:<type> } <rname>;

end;

var

<vnames>:<rname>; <rname><vnames>;

Существует также более строгий формат в Си для прямого определения структур переменных, более аналогичный формату Паскаля.

Турбо Паскаль Турбо Си

var

<vnames>:record struct<rname>

{

<fnames>:<type> <type><fnames>;

... ...

<fnames>:<type> <type><fnames>;

end; } <vnames>;

В этом варианте, <rname> необязательная структура; вы должны записать ее, если планируете объявить другие переменные типа <rname>. Кроме того, записи в Паскале и структуры в Си довольно близки.

Турбо Паскаль Турбо Си

Type

Student=record struct student {

Last,First:string[20]; char last[20],first[20];

SSN : string[11]; char ssn[11];

Fgt : Integer; int age;

Tests: array[1..5] if integer; int tests [5];

GPA : Real float gra;

end; } current;

var main ()

Current: Student; {

begin

Current.Last='Smith'; strcpy(current.last,"Smith");

Current.Age =21; current.age=21;

Current.Test[1]=97; current.test[0]=97;

Current.GPA=3.94; current.gpa=3.94;

end }

Главное различие между Паскалем и Си в том, что в Паскале имеются операторы, а в Си - нет. Мы могли бы переписать код на Паскале, использовав выше оператор with Current do , и затем ссылаться на поля без указания в начале Current. В Си вы всегда должны указывать Current в начале. Однако, Си также имеет оператор доступа member (->), используемый, когда идентификатор слева от оператора является указателем на собственную структуру. Для примера, если pstudent является указателем на struct, тогда

strcpy(pstudent -> last,"Jones");

присвоит переменной last строку "Jones".