Использование вложенных структур
Использование в качестве членов структур массивов
Присваивание структур
Массивы структур
Одновременное объявление структуры и переменных типа структуры
struct mystruct {
int cena;
float ves;
char name[20] ;
} first,second; // создание двух переменных типа mystruct
4. Объявление структуры, если в программе используется только одна структура
struct {
int cena;
float ves;
char name[20] ;
}first,second;
Пример структуры:
struct {
AnsiString name;// строка в стиле C++Builder
int x;
}first;
char z[20]; // строка в стиле С – с нулевым байтом на конце
int main()
{
first.name="Иванов";
first.x=20;
strcpy(z, first.name.c_str());// метод с_str() для преобразования в строку в
//стиле С
return 0;
}
5. Общий формат объявления структуры:
struct имя_типа_структуры {
тип имя_элемента1;
тип имя_элемента2;
.
.
.
тип имя_элементаN;
} переменная1, переменная2,...,переменнаяK;
· Задание массива
mystruct mass[20];
· Обращение к элементу массива
mass[2].cena=100; // обращение к 3-ему элементу массива;
// индексация элементов массива начинается с 0
· Одновременное объявление структуры и массива типа структуры
const int size=20; // задание константы
struct mystruct {
int cena;
float ves;
char name[20] ;
} mass[size]; // создание массива
Содержимое одной структуры можно присвоить другой, если обе эти структуры имеют одинаковый тип | |
Правильное присвоение | Неправильное присвоение |
struct my{ int a,b; }s1,s2; int main() { s1.a=s1.b=10; s2.a=s2.b=20; s2=s1; return 0; } | struct my1{ int a,b; }s1; struct my2{ int a,b; }s2; int main() { s1.a=s1.b=10; s2.a=s2.b=20; s2=s1; // ошибка компиляции return 0; } |
Две структуры физически одинаковы, но имеют разные имена типов |
8. Использование указателей на структуры и операции -> (стрелка).
struct mystruct {
int cena;
float ves;
char name[20] ;
} first; // определение структурной переменной, память выделяется при
//компиляции
…
mystruct *p; // объявление указателя на структуру
p=&first;// указателю p присваивается адрес структурной переменной first
p->cena=100;// доступ к члену структуры через указатель
// аналогично (*p).cena=100;
p=new mystruct;// динамическое выделение памяти под указатель
p->cena=200;
delete p; // удаление динамической переменной-указателя
Для получения доступа к членам структуры используется операция “.” Для получения доступа к членам структуры через указатель используется операция “->” |
struct mystruct {
int mass[5][5]; // двумерный массив целых чисел
int a;
float b;
} prim; // объявление структурной переменной
…
prim.mass[1][2]=20; // присвоение члену типа массив структурной
//переменной prim
struct addr{ // объявление вложенной структуры
AnsiString city; // город
int index; // почтовый индекс
AnsiString street; // улица
int house; // номер дома
int flat; // номер квартиры
}; // переменные не указываются!!!
struct stud {
AnsiString name;
int grup; // номер группы
addr address; // в качестве члена структуры используется вложенная
// структура
}student; // переменная типа stud
…
student.address.index=190000;
Члены структур указываются слева направо, от самой внешней до самой внутренней |