2017-09-14 1 views
1

Ich versuchte memset wieWie initialisiert man ein Array von Pointer innerhalb einer Struktur mit Hilfe von struct constructor?

struct TreeNode { 
    bool exist; 
    bool word_ending; 
    TreeNode* branches[3]; 
    TreeNode(): exist(true), word_ending(false) { 
     memset(branches, NULL, sizeof(branches)); 
    } 
}; 

aber es erscheint Warnungen

warning: implicit conversion of NULL constant to 'int' [-Wnull-conversion] 
     memset(branches, NULL, sizeof(branches)); 
     ~~~~~~   ^~~~ 
         0 
1 warning generated. 

Gibt es eine andere Möglichkeit, die Anordnung der Zeiger auf NULL zu initialisieren?

+0

'TreeNode * Zweige [3] = {};' in der Deklaration. – nwp

+0

Ist NULL nicht gleich 0? –

+1

Wenn Sie NULL in der Quelle auf 0 setzen, wird es kompiliert. Aber mach einfach das, was NathanOliver vorgeschlagen hat. –

Antwort

4

Anstatt memset zu verwenden, können wir das Array in der Elementinitialisierungsliste initialisieren. Wenn wir

TreeNode(): exist{true}, word_ending{false}, braches{} {} 

verwenden Dann wird braches Null initialisiert. Dies funktioniert, weil jeder fehlende Initialisierer in einer Initialisierungsliste bewirkt, dass das entsprechende Element auf Null initialisiert wird.

+0

Danke! Aber wie initialisiert man Zweige mit nullptr? Es ist nicht dasselbe wie 0. – danche

+0

@danche 0 ist der Nullzeiger. 'nullptr' wird nur 0 in den Zeigertyp umgewandelt. – NathanOliver

+0

also brauchen wir nicht 'zweige {nullptr, nullptr, nullptr}'? – danche

Verwandte Themen