2016-07-25 14 views
-5

dieser Code Gegeben:Was sind die Unterschiede zwischen den folgenden Codes

#include <iostream> 
using namespace std; 
int main() 
{ 
    typedef struct node 
    { 
    int data; 
    node* left; 
    node* right; 
    } *nodeptr; 

    nodeptr root, curr, temp; 

} 

Und dieser zweite Code:

#include <iostream> 
using namespace std; 
int main() 
{ 
    struct node 
    { 
    int data; 
    node *left; 
    node *right; 
    } 

    node *root, *curr, *temp; 

} 

Ich habe ein paar Fragen:

  1. beide Codes repräsentieren das gleiche?
  2. Sind int* a und int *a das gleiche?
  3. In dem ersten Code, wenn ich erklärte: queue <nodeptr>q es funktionierte, aber im zweiten Code, als ich queue <node>q erklärte, hat es nicht funktioniert. Warum?
+0

Eine Frage pro Frage bitte. Sonst gibt es keinen Wert für zukünftige Forschung. –

+0

1. Nein. 2. Ja. 3. Erarbeiten Sie auf _ "es hat nicht funktioniert" _ –

+1

Ihr zweites Beispiel fehlt ein ';' nach der Struct-Deklaration. –

Antwort

0

int * a; und int * a; sind gleich. Der weiße Bereich für Zeiger ist vollkommen in Ordnung und ändert nichts an Bedeutung.

Warteschlangenknoten q sollte funktionieren. Aber vielleicht fragen Sie das in einer anderen Frage mit mehr Details. Ich habe einen Arbeitscode angehängt, der funktioniert queue<node> q; funktioniert.

#include <iostream> 
#include <queue> 
using namespace std; 
    struct node 
    { 
    int data; 
    node *left; 
    node *right; 
    }; 

int main() 
{ 
    node *root, *curr, *temp; 
    queue<node> q; 
} 
+0

_ "Warteschlangenknoten q sollte funktionieren" _ ??? Zeigen Sie den Code, der eigentlich _ arbeiten soll. –

+0

Ich habe meine Antwort bearbeitet, um Arbeitscode zu geben. –

0

Für Ihre zweite Frage möchte ich nur sagen, dass entweder Sie schreiben int* a oder int *a, es ist ein und dieselbe Sache.

int* a; 
int *a; 
int * a; 

Alle gleich sind, wo ein ein Zeiger auf vom Typ int ist, infact int*a; ist auch gleiche ...

+0

Es gibt bereits eine doppelte Frage dafür. –

1

Sind die beide Codes das gleiche darstellt?

Sie repräsentieren fast die gleiche Sache, mit der Ausnahme, dass die erste nodeptr als typedef ed Namen definiert.

Ist int * a und int * a dasselbe?

Ja.

für den ersten Code, wenn ich erklärte: queue <nodeptr>q es funktionierte aber für den zweiten Code, wenn ich in Code deklariert: queue <node>q es nicht funktioniert hat. Warum?

queue<nodeptr> q ist das gleiche wie queue<node*> q. Daher ist der Vergleich nicht angemessen.

Sie sollten queue<node> verwenden können, wenn Sie C++ 11 verwenden. Sehen Sie es bei http://ideone.com/tkij08 funktioniert.

+0

Über lokale Strukturen, das war OK seit C++ 11. – juanchopanza

0
  1. Fast. Beide definieren eine struct node, aber die erste definiert auch einen Typ für einen Zeiger auf struct node namens nodeptr.

  2. Nein, sie sind genau das gleiche.Der Leerraum oder das Fehlen davon spielt keine Rolle.

  3. Im ersten Fall deklarieren Sie eine Warteschlange mit Zeigern, um Knoten zu typisieren, während Sie im zweiten Fall eine Warteschlange mit Objekten vom Typ Knoten deklarieren. queue macht vermutlich eine zusätzliche Anforderung an seinen Inhalt, die node nicht erfüllt. Ohne die Quelle von queue zu sehen, ist es schwer zu erraten, was das sein könnte, aber vielleicht braucht es einen Vergleichsoperator irgendeiner Art, der definiert werden soll. Wenn Sie mehr wissen möchten, sollten Sie die Beispielquelle und die Fehlermeldungen, die Sie erhalten, wirklich posten und nicht nur angeben, dass es nicht funktioniert.

Verwandte Themen