
- •Типы, определяемые пользователем
- •1. Объявление структуры:
- •2. Использование структуры в программе и доступ к ее членам
- •3. Одновременное объявление структуры и переменных типа структуры
- •5. Общий формат объявления структуры:
- •6. Массивы структур
- •7. Присваивание структур
- •9. Использование в качестве членов структур массивов
- •10. Использование вложенных структур
- •13. Битовые поля структур (bit-fields)
- •14. Объединения
- •Распределение памяти
- •Объявление класса в общем виде
- •Доступ к данным объекта в динамической области
Типы, определяемые пользователем
Структуры в С/C++
Структура – это группа связанных переменных |
1. Объявление структуры:
struct mystruct // mystruct – имя ( или дескриптор) структуры
{
int
cena;
float ves;
char name[20] ;
}; // ставится в конце знак (;)
|
2. Использование структуры в программе и доступ к ее членам
mystruct first, second; // создание двух переменных типа mystruct
first.cena=1000;
first.ves=100.5;
strcpy(first.name,"Товар_1");
3. Одновременное объявление структуры и переменных типа структуры
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;
6. Массивы структур
Задание массива
mystruct mass[20];
Обращение к элементу массива
mass[2].cena=100; // обращение к 3-ему элементу массива;
// индексация элементов массива начинается с 0
Одновременное объявление структуры и массива типа структуры
const int size=20; // задание константы
struct mystruct {
int cena;
float ves;
char name[20] ;
} mass[size]; // создание массива
7. Присваивание структур
Содержимое одной структуры можно присвоить другой, если обе эти структуры имеют одинаковый тип | |
Правильное присвоение |
Неправильное присвоение |
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; // удаление динамической переменной-указателя
Для получения доступа к членам структуры используется операция “.” Для получения доступа к членам структуры через указатель используется операция “->” |