Инициализация структур

. . .

. . .

Структуры

Перечисления

Переименование типов

Типы данных, определяемые пользователем

Ссылки на функцию

Подобно указателю на функцию определяется и ссылка на функцию:

тип_функции(&имя_ссылки)(параметры)

инициализирующее_выражение;

Пример 91.

int f(float a,int b){. . . } /*определение функции*/

int(&fref)(float,int)=f; //определение ссылки

Использование имени функции без параметров и скобок будет восприниматься как адрес функции. Ссылка на функцию является синонимом имени функции. Изменить значение ссылки на функцию нельзя, поэтому более широко используются указатели на функции, а не ссылки.

 

Пример 92.

#include <iostream.h>

void f(char c)

{cout<<”\n”<<c;}

void main()

{

void (*pf)(char); //указатель на функцию

void(&rf)(char); //ссылка на функцию

f(‘A’); //вызов по имени

pf=f; //указатель ставится на функцию

(*pf)(‘B’); //вызов с помощью указателя

rf(‘C’); //вызов по ссылке

}

Типу можно задавать имя с помощью ключевого слова typedef:

typedef тип имя_типа [размерность];

Пример 93

typedef unsigned int UNIT;

typedef char Msg[100];

Такое имя можно затем использовать также как и стандартное имя типа:

UNIT a,b,c; //переменные типа unsigned int

Msg str[12]; /* массив из 10 строк по 100 символов*/

 

Если надо определить несколько именованных констант таким образом, чтобы все они имели разные значения, можно воспользоваться перечисляемым типом:

enum [имя_типа] {список констант};

Константы должны быть целочисленными и могут инициализироваться обычным образом. Если инициализатор отсутствует, то первая константа обнуляется, а остальным присваиваются значение на единицу большее, чем предыдущее.

 

Пример 94

enum Err{ErrRead, ErrWrite, ErrConvert);

Err error;

. . . .

switch(error)

{

case ErrRead: …..

case ErrWrite: …..

case ErrConvert: …..

}

Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена.

Форматы определения структурного типа следующие:

1. struct имя_типа//способ 1

{

тип 1 элемент1;

тип2 элемент2;

};

Пример 95

struct Date //определение структуры

{

int day;

int month;

int year;

};

Date birthday; //переменная типа Date

 

2. struct//способ 2

{

тип 1 элемент1;

тип2 элемент2;

} список идентификаторов;

 

Пример 96

struct

{

int min;

int sec;

int msec;

}time_beg,time_end;

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

Во втором случае описание структуры служит определением переменных.

 

3.Структурный тип можно также задать с помощью ключевого слова typedef:

 

Пример 97. способ 3

Typedef struct

{

floar re;

float im;

}Complex;

Complex a[100]; /*массив из 100 комплексных чисел.*/

Для инициализации структур значения ее полей перечисляют в фигурных скобках.

 

Пример 98

1. struct Student

{

char name[20];

int kurs;

float rating;

};

Student s={”Иванов”,1,3.5};

2. struct

{

char name[20];

char title[30];

float rate;

}

employee={“Петров», “директор”,10000};