是什么下列代码

是什么下列代码

问题描述:

鉴于此代码之间的差异:是什么下列代码

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

    nodeptr root, curr, temp; 

} 

而这第二个代码:

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

    node *root, *curr, *temp; 

} 

我有几个问题:

  1. 做两个代码代表一样的东西?
  2. int* aint *a代表了同样的事情吗?
  3. 在我声明的第一个代码中:queue <nodeptr>q它可以工作,但在第二个代码中,当我声明queue <node>q时它没有工作。为什么?
+0

请问每个问题一个问题。否则,未来的研究是没有价值的。 –

+0

1.第2号。是的。 3.详细说明_“它没有工作”_ –

+1

你的第二个例子在结构声明后遗漏了';'。 –

int * a;和int * a;是相同的。这里的指针空白是完美的,不会改变任何意义。

队列节点q应该工作。但也许用更多的细节问一个不同的问题。我附上了一些工作代码,确实可以运行queue<node> q;

#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

_“队列节点q应该工作”_ ???显示_should work_实际的代码。 –

+0

我编辑了我的答案以提供工作代码。 –

关于第二个问题,我只想说,无论你写int* aint *a,它是同一个东西。

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

全部相同,其中a是一个指向int类型的,事实上int*a;是相同的也...

+0

这已经有一个重复的问题。 –

是两个代码代表同样的事情?

它们几乎代表相同的东西,除了第一个定义为nodeptr作为typedef ed名称。

是int * a和int * a表示同样的东西吗?

是的。

对于第一代码时,我声明:queue <nodeptr>q它的工作,但对于第二个代码,当我在代码中声明:queue <node>q它并没有奏效。为什么?

queue<nodeptr> qqueue<node*> q相同。因此比较是不恰当的。

如果您使用C++ 11,则应该可以使用queue<node>。看到它在http://ideone.com/tkij08工作。

+0

关于本地结构,自C++ 11以来一直不错。 – juanchopanza

  1. 差不多。两者都定义了struct node,但第一个也定义了指向struct node的指针的类型,其名称为nodeptr

  2. 不,他们是完全一样的东西。空白或缺少空白并不重要。

  3. 因为在第一种情况下,你声明了一个指向类型节点的指针队列,而在第二种情况下,你声明了一个节点类型的对象队列。 queue大概会对node未满足的内容提出额外要求。没有看到queue的来源,很难猜出可能是什么,但可能需要一个比较运算符来定义某种类型。如果你想知道更多,你应该真正发布示例源代码和你得到的错误信息,而不是仅仅声明'它不工作'。