C ++ Структура внутри себя?

Я пытаюсь перенести этот код на python, но в C ++ я кое-что не совсем понимаю (я знаю немного C ++, но это вне меня):

typedef struct huffnode_s { struct huffnode_s *zero; struct huffnode_s *one; unsigned char val; float freq; } huffnode_t; 

То, что я не понимаю, – это то, как huffnode_s может быть внутри себя, я никогда не видел этого раньше и не совсем понимаю его. Что это значит, и если кто-то может, что будет эквивалентом питона?

    8 Solutions collect form web for “C ++ Структура внутри себя?”

    huffnode_s не входит в себя, там только указатели на huffnode_s . Поскольку указатель имеет известный размер, это не проблема.

    Эта.

     class Huffnode(object): def __init__(self, zero, one, val, freq): """zero and one are Huffnode's, val is a 'char' and freq is a float.""" self.zero = zero self.one = one self.val = val self.freq = freq 

    Затем вы можете реорганизовать ваши различные функции C как методы этого класса.

    Или, может быть, это.

     from collections import namedtuple Huffnode = namedtuple( 'Huffnode', [ 'zero', 'one', 'val', 'freq' ] ) 

    Если вы хотите, чтобы ваши функции C оставались функциями.

    Вот и все.

     h0 = Huffnode(None, None, 'x', 0.0) h1 = Huffnode(None, None, 'y', 1.0) h2 = Huffnode(h0, h1, 'z', 2.0) 

    Это все, что требуется.

    он не имеет структуры сам по себе. он имеет указатель на эту структуру.

    в памяти struct huffnode_s будет выглядеть (32-битная машина):


    | —————— huffnode_s * zero – 4 байта ————– |

    | —————— huffnode_s * one – 4 байта —————- |

    | unsigned char val – 1 байт + 3 байта padding ======= | |

    | ——————- float freq – 4 байта ————————- |


    эти размеры будут варьироваться от машины к машине, и как она выглядит в памяти, решается компилятором.

    Чтобы добавить к ответу Карла, то же самое на C ++ также возможно:

     class Foo { public: Foo() {} Foo *anotherFoo; }; 

    (Обратите внимание, что вышеприведенный класс глупый, но дело в том, что вы можете иметь указатель внутри класса, относящегося к типу класса)

    (struct huffnode_s *) объявляет указатель на другую структуру, которая включает в себя те же переменные, что и структура, в которой она объявлена. См. этот вопрос .

    Это указатель на huffnode внутри huffnode. Это означает, что вы можете сказать:

     huffnode_t *node = ...; huffnode_t *greatgreatgreatgrandchild = node->zero->zero->zero->zero->zero; 

    Это будет скомпилировано, и оно будет работать до тех пор, пока все эти потомки huffnode будут фактически выделены и правильно указаны.

    Указатели очень похожи на ссылки на объекты в JavaScript. На самом деле они не содержат данных, они просто ссылаются на него. Будьте уверены, что вы не смотрите на бесконечный тип.

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

     struct linked_list_node { int data; struct linked_list_node *next; // <- self reference }; 

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

    Указатели внутри структуры позволят объединить экземпляры вместе в виде связанного списка.

     
    Interesting Posts for Van-Lav

    Изменение PyScripter для работы с различными версиями Python

    Писериальный буфер заполняется быстрее, чем я могу читать

    Запись в CSV с Python добавляет пустые строки

    Сочетание поиска сетки и перекрестной проверки в scikit learn

    Каковы преимущества использования Elixir

    Как опубликовать в API-интерфейсе Django REST Framework с помощью связанных моделей

    Как документировать модуль в Python?

    Запуск скрипта python в качестве другого пользователя

    Как избежать «Разрешения отказа» при использовании pip с virtualenv

    Путь развития Python – от ученика до гуру

    Динамически добавлять / удалять потоки в рабочий пул в сельдерее

    Автоматизация / сценарии Telnet

    Как подключиться к TT X_TRADER API для создания автоматизированной торговой системы с использованием python?

    Использование True, False и None в качестве возвращаемых значений в функциях python

    В Python, как следует извлекать второе имя каталога в пути?

    Python - лучший язык программирования в мире.