Ich habe versucht, diesen Code nach Python zu portieren, aber es gibt etwas, das ich in C ++ nicht verstehe (ich kenne ein bisschen C ++, aber das ist jenseits meiner):
%Vor%Was ich nicht verstehe ist, wie huffnode_s in sich selbst sein kann, ich habe das vorher noch nie gesehen und verstehe es nicht ganz. Was bedeutet das, und wenn jemand kann, was wäre das Python-Äquivalent?
huffnode_s
ist nicht in sich selbst, nur Zeiger bis huffnode_s
sind dort drin. Da ein Zeiger von bekannter Größe ist, ist das kein Problem.
es hat keine Struktur in sich. Es hat einen Zeiger auf diese Struktur.
im Speicher struct huffnode_s würde aussehen (32-Bit-Maschine):
| ------------------ huffnode_s * null - 4 Bytes -------------- |
| ------------------ huffnode_s * eins - 4 Bytes ---------------- |
| unsigned char val - 1 Byte + 3 Bytes Füllung ======= |
| ------------------- float freq - 4 Bytes ---------------------- --- |
Diese Größen würden von Maschine zu Maschine variieren, und wie es im Speicher aussieht, wird vom Compiler entschieden.
Um Carls Antwort hinzuzufügen, ist das Gleiche in C ++ auch möglich:
%Vor%(Beachten Sie, dass die obige Klasse dumm ist, aber der Punkt ist, dass Sie einen Zeiger innerhalb einer Klasse haben können, die vom Klassentyp ist)
(struct huffnode_s *) deklariert einen Zeiger auf eine andere Struktur, die dieselben Variablen enthält wie die Struktur, in der sie deklariert ist. Siehe diese Frage .
Dies ist ein Zeiger auf einen Huffnode innerhalb eines Huffnodes. Was das bedeutet ist, dass Sie sagen können:
%Vor%Dies wird kompiliert, und es wird so lange funktionieren, wie all diese Huffnode-Nachkommen tatsächlich zugewiesen und korrekt ausgerichtet sind.
Zeiger sind wie Objektverweise in JavaScript. Sie enthalten keine Daten, sie beziehen sich nur darauf. Seien Sie versichert, dass Sie nicht auf einen unendlichen Typ schauen.
Dies ist bekannt als eine selbstreferentielle Struktur und es ist genau wie es sich anhört: eine Struktur, die einen Verweis auf sich selbst enthält. Ein häufiges Vorkommen davon ist in einer Struktur, die einen Knoten für eine verknüpfte Liste beschreibt. Jeder Knoten benötigt einen Verweis auf den nächsten Knoten in der Kette.
%Vor%Tags und Links python c c++ huffman-code