С++ структуры struct
Тэги: язык С основы язык С const язык С union
📅24-10-2018 👁327
Структуры в языке С++ позволяют связать вместе несколько элементов. Это некое подобие объекта.
Пример:
struct st_type {
char item[900];
int on_hand;
double cost;
} name1, name2; // создали структуру и объявили 2 переменных
st_type name3; // объявили еще переменную для структуры st_type
При объявлении переменных, С++ автоматически выделит объем памяти для хранения всех членов структуры.
Записать значение в структуру:
name1.cost = 123.2;
gets(name2.item);
Массивы структур
Чтобы объявить массив структур, нужно определить структуру, а потом объявить массив элементов этого структурного типа.
Для примера выше:
st_type names[100];
ิ
или:
struct st_type {
char item[900];
int on_hand;
double cost;
} names[100];
Для получения доступа к конкретной структуре используем запись вида:
cout << names[55].cost;
Указатели на структуры
Указатели на структуры используются также, как и указатели на переменные.
Указатель на структуру объявляется так же, как и указатель на переменую с помощью символа * перед именем структурной переменной.
struct st_type {
char item[5];
int x;
double y;
} good1;
Например:
st_type *name_pointer; // объявили указатель на структуру st_type
Чтобы найти адрес структурной ПЕРЕМЕННОЙ надо ПЕРЕД ЕЕ ИМЕНЕм поставит оператор &
name_pointer = &good1; // в указатель name_pointer помещен адрес структурной переменной good1
Теперьт получить доступ к членам структуры можно с помощью стрелки.
name_pointer->y; // เполучаем доступ к полю y
Указатель на структуру можно использовать в качестве параметра функции. Такой способ передачи параметров работает гораздо быстрее, чем когда функции передается объемная структура. Передача указателей работает быстрее, чем передача самой структуры.
Битовые поля структур
Пользволяют доступ к конкретному разряду байта.
Также в них можно хранить несколько булевых значений в одном байте.
Общий формат определения битовых полей:
sctruct имя_типа_структуры {
тип имя1 : длина;
тип имя10 : длина;
};
тип - это тип битового поля (например unsigned)
длина - количество битов в этом поле
Пример программы которая выводит в двоичном коде ASCII-кода нажатой клавиши.
Мы используем как структуру битовых полей так и объединения.
#include <conio.h>
#include <iostream>
using namespace std;
// битовые поля (1 байт) которые будут расшифрованы
struct bits {
unsigned b1:1;
unsigned b2:1;
unsigned b3:1;
unsigned b4:1;
unsigned b5:1;
unsigned b6:1;
unsigned b7:1;
unsigned b8:1;
};
// объединяем струкутур из 8 битовых полей и символа, чтобы они находились в одной области памяти
union ch_bits {
struct bits var_bit;
char ch;
} ascii;
// в функцию передаем тип объединения
void disp_bites (ch_bits b);
int main ()
{
do {
cin >> ascii.ch;
cout << ascii.ch << " : ";
disp_bites (ascii);
cout << '\n';
} while (ascii.ch != 'q');
return 0;
}
void disp_bites (ch_bits b){
if (b.var_bit.b8) cout << "1"; else cout << "0";
if (b.var_bit.b7) cout << "1"; else cout << "0";
if (b.var_bit.b6) cout << "1"; else cout << "0";
if (b.var_bit.b5) cout << "1"; else cout << "0";
if (b.var_bit.b4) cout << "1"; else cout << "0";
if (b.var_bit.b3) cout << "1"; else cout << "0";
if (b.var_bit.b2) cout << "1"; else cout << "0";
if (b.var_bit.b1) cout << "1"; else cout << "0";
}
Результат:
a
a : 01100001
b
b : 01100010
c
c : 01100011
q
q : 01110001
Эта программа демонстрирует альтернативный способ отражения отдельных битов, составляющих байт. Объединение union позволяет ПРИСВОИТЬ ЗНАЧЕНИЕ НАЖАТОЙ КЛАВИШИ СИМВОЛЬНОЙ ПЕРЕМЕННОЙ С БИТОВЫМИ ПОлЯМИ для отображения отдельных битов.
Оставить свой ответ: