Понедельник, Июль 5th, 2010

Шпоры по С++

Указатель на структуру может входить в определение того же структурного типа. Именно так в определении формата структуры record введены два указателя:
record *prior — указатель на предыдущий элемент в двухсвязном списке структур;
record *next — указатель на следующий элемент.
При определении с помощью typedef имени для структурного типа, у последнего может отсутствовать основное имя. Например, структурный тип можно ввести и следующим образом:
typedef struct { char *name; long sum; } STRUCT;
STRUCT struct_st , *struct_ps , struct_as[8];
В данном примере имя типа STRUCT вводится с помощью typedef для структуры, тип которой не поименован. Затем имя типа STRUCT используется для определения объектов. Таким образом, имеются две возможности определения имени структурного типа.
В отношении элементов структур существует практически только одно существенное ограничение — элемент структуры не может иметь тот же самый тип, что и определяемый структурный тип. Таким образом, следующее определение структурного типа ошибочно:
struct mistake { mistake s; int m; }; // Ошибка!
В то же время элементом определяемой структуры может быть указатель на структуру определяемого типа:
struct correct {correct *ps; long f; };// Правильно!
Элементом определяемой структуры может быть структура, тип которой уже определен:
struct begin { int k; char *h; } strbeg;
struct next {begin beg; float d; };
Если в определении структурного типа нужно в качестве элемента использовать указатель на структуру другого типа, то разрешена такая последовательность определений:
struct A; struct B { struct A *pa; };
struct A{ struct B *pb; };
Неполное определение структурного типа А можно использовать в определении структурного типа В, так как определение указателя pa на структуру типа А не требует сведений о размере структуры типа А. Последующее определение в той же программе структурного типа А обязательно.
Функция может возвращать структуру как результат:
struct help { char *name; int number; };
help func1 (void) ; // Прототип функции
Функция может возвращать указатель на структуру:
help *func2 (void) ; // Прототип функции
Функция может возвращать ссылку на структуру:
help& func3 (void) ; // Прототип функции
Через аппарат параметров информация о структуре может передаваться в функцию либо непосредственно, либо через указатель, либо с помощью ссылки:
void func4 (help str) ; // Прямое использование
void func5 (help *pst); // С помощью указателя
void func6 (help& rst); // С помощью ссылки
Рассмотрим применение операции new к структурам. Операндом для операции new может быть структурный тип. В этом случае выделяется память для структуры использованного типа, и операция new возвращает указатель на выделенную память. Память может быть выделена и для массива структур, например, так:
last = new record[9]; // Память для массива структур

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры