Указатели на структуры
Указатель на структуру объявляется точно так же, как и указатель на данные простых типов: используется операция '*' и указывается тип данных. Тип данных структуры указывается заданием ключевого слова struct и имени шаблона этой структуры.
Синтаксис:
ИмяСтруктурногоТипа *ИмяУказателяНаСтруктуру
Например:
struct goods *p_goods;
struct student *p_stu1, *p_stu2;
Указатели на структуры могут вводиться и для безымянных (не имеющих имен) структурных типов.
Например:
struct {
char *name;
int age;
} *person; //указатель на структуру
Если структура объявлена с помощью typedef, то при определении указателей название этого типа может использоваться без служебного слова struct.
Например:
complex *cc, *ss, comp;
При определении указателя на структуру он может быть инициализирован. Корректно в качестве инициализирующего значения применять адрес структурного объекта того же типа, что и тип определяемого указателя.
Например:
struct particle {
double mass;
float coord[3];
} dot[3], point, *pinega;
//Инициализация указателей
struct particle *p_d=&dot[1], *pinta=&point;
Значение указателя на структуру может быть определено и с помощью присваивания.
Например:
pinega=&dot[0];
При определении элемента структуры запрещено указание в качестве элемента самого себя (через структурный объект).
Например:
struct STUD { //некорректное объявление поля структуры
STUD t;
} a, b;
Однако элемент структуры может быть указателем на определяемую структуру.
Например:
struct STUD { //корректное объявление поля структуры
STUD *pt;
} a, b;
Кроме того, допустимо неполное определение типа структуры, если ее указатель является элементом другой структуры.
Например:
struct A; //неполное определение структурного типа
struct B {struct A *pta;};
struct A {struct B *ptb;};
При определении структурных типов может потребоваться организация взаимных перекрестных связей между структурами двух и более разных типов. В этом случае помогает применение указателей на структуры.
Например:
struct part {
double modul;
struct cell *element_cell;
struct part *element_part;
};
struct cell {
long summa;
struct cell *one;
struct part *two;
};
Дата добавления: 2015-02-16; просмотров: 552;