С++ структуры struct

Структуры в языке С++ позволяют связать вместе несколько элементов. Это некое подобие объекта.

 

Пример:

 

    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 позволяет ПРИСВОИТЬ ЗНАЧЕНИЕ НАЖАТОЙ КЛАВИШИ СИМВОЛЬНОЙ ПЕРЕМЕННОЙ С БИТОВЫМИ ПОлЯМИ для отображения отдельных битов.



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы