C / C ++ Как на самом деле работают структуры?

0

Я знаю, что такое структура, и как ее создать, и почему вы должны ввести один...

typedef struct Foo {
    int a;
    char b;
    float c;
} Foo;

Но я не знаю, как это работает. Сохраняется ли шаблон в стеке и используется как таблица поиска, когда вы ссылаетесь на элемент (подобно тому, как работают классы)? Или здесь есть другой дизайн.

  • 1
    В C ++ struct - это class который имеет открытые члены и базовые классы по умолчанию.
  • 0
    В C ++ typedef имеет смысла.
Теги:
struct

2 ответа

5
Лучший ответ

Часть о ЬурейеМ-щих структурах является дискуссионной.

Структуры - это в основном удобный способ хранения совокупности данных.

Компилятор знает, какие смещения указывают на какой элемент и печет их в программу, когда ему нужно получить доступ к элементу. Поскольку структура структуры не может меняться во время выполнения, нет необходимости использовать таблицу поиска.

Например, я мог бы написать указанную выше структуру следующим образом:

 char Foo[12];

 *((int *)  (Foo + 0)) = a;
 *((char *) (Foo + 4)) = b;
 *((float *)(Foo + 8)) = c;

Вы можете видеть, что смещения выпекаются вручную. Там нет необходимости в таблице поиска. Когда вы используете struct, компилятор делает почти то же самое автоматически.

  • 0
    Хорошо, так что компилятор превращает foo.x в правильное смещение в память?
  • 0
    Да, это верно.
Показать ещё 1 комментарий
1

struct - это просто определение. Он определяет расположение данных, но не сохраняется в вашей программе, если вы не объявите переменную этого типа. Переменная может храниться в стеке, в куче или даже в регистрах, если она достаточно мала... в соответствии с теми же правилами, которые используются для других переменных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню