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

16 Указатели на функции Указатели на функции

Указатели на функции задаются следующим образом:

1

2

3

void f() { }

void (*pf)() = &f;

pf();

В этом коде f - некоторая функция. Во второй строчке определяется переменная pf, которая является указателем на функцию, которая ничего не возвращает и не принимает ни одного аргумента. В определении pf ей присваивается адрес функции f. В третьей строке мы вызываем функцию по указатели pf(в данном случае будет вызвана функция f).

Рассмотрим еще несколько примеров: Пример 2.

1

2

void swap(int & a, int & b) { }

void (*pswap)(int &, int &) = &swap;

Пример 3.

1

2

3

4

5

6

7

8

void f(int a) { }

void g(int b) { }

 

void (*pf)(int) = &f;

pf(10); // Вызывается f(10)

 

pf = &g;

pf(20); // Вызывается g(20)

Примечание: во время присваивания указателю на функцию адреса функции амперсанд(&) можно опустить. В этом случае будет выполнено автоматическое привидение имени функции к адресу этой функции.

Пример 4.

1

2

3

4

5

void f() { }

void g() { }

 

void (*pf) = &f; // Верно, &f - указатель на функцию f

pf = g; // Тоже верно, имя функции(g) автоматически приводится к указателю на функцию.   

17 Структуры

Cтруктура - это составной объект, в который входят элементы любых

типов, за исключением функций. В отличие от массива, который является од-

нородным объектом, структура может быть неоднородной.

Синтаксис определения структурного типа данных:

struct имя_типа

{

спецификатор_типа имя_элемента;

спецификатор_типа имя_элемента;

. . .

};

Служебное слово struct указывает начало определения структуры. За ним

следует имя_типа, которое присваивается данному структурному типу; оно

 array:

ptr: 17

называется идентификатором структуры. Затем в фигурных скобках указывает-

ся список отдельных элементов, образующих структуру. Элементы структуры

могут иметь любой тип, включая массивы, другие структуры.

Над структурами определены следующие операции: доступ к элементам

структуры через «.» и через указатель на нее « ». Доступ к элементам струк-

туры организован по имени элемента, а не по номеру как в массиве.

Пример c использованием типа данных struct Student, описывающего инфор-

мацию о студенте.

struct Student

{

char name[20]; /* Фамилия */

unsigned int id; /* Номер зачетной книжки */

unsigned int age; /* Возраст */

};

struct Student group[30]; /* Определение массива структур типа

struct Student */

struct Student starosta={“Иванов”, 990345, 20}; /* Инициализация

переменной типа struct Student */

group[0]=starosta; /* Присваивание нулевому элементу массива

переменной типа struct Student */