интерпретация c структур - PullRequest
0 голосов
/ 12 февраля 2012

Учитывая следующий код c:

typedef struct ELE *tree_ptr

struct ELE {
   long val;
   tree_ptr left;
   tree_ptr right;
};

Мне кажется, ELE инкапсулирует один узел двоичного дерева. Каждый узел имеет некоторое 32-битное значение (val), pointer для левого узла и pointer для правого узла.

Может ли кто-нибудь подтвердить, что моя интерпретация верна?

Кроме того, ELE - это просто произвольное имя переменной или какое-то соглашение, используемое для именования struct?

редактирование:

Что если бы существовала программа c, которая сгенерировала следующие 3 строки кода сборки:

movq     %rbx, -24(%rsp)
movq     %rbp, -16(%rsp)
movq     %r12, -8(%rsp)

Эти 3 строки освобождают место для 3 элементов структуры в стеке?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2012

Скорее всего, это будет ELEment, один элемент коллекции.

Несколько других моментов для рассмотрения:

  1. Вашему typedef в конце нужна точка с запятой.
  2. Стандарт C не гарантирует, что long целые числа являются 32 битами.
  3. Тип tree_ptr указывает, что, вероятно, является двоичным деревом, но все, что вы точно знаете, это то, что это структура, содержащая long и два указателя на тот же тип, что и структура. Это может быть список с двойной связью, если кодер, составивший его, был ненормальным или достаточно садистским: -)
1 голос
/ 12 февраля 2012

ELE - это так называемый тег структуры. Теги находятся в отдельном пространстве имен от других имен в C. (другие пространства имен - это те, которые предназначены для членов соответствующих структур и объединений, меток и остальных (например, имен переменных, имен функций и т. Д.))

То есть ELE (скорее всего, для "Элемента") относится к этой структуре внутри пространства имен для структур / объединений / перечислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...