以下代码之间有什么区别?

时间:2016-07-25 21:18:46

标签: c++ pointers

鉴于此代码:

#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时它不起作用。为什么?

4 个答案:

答案 0 :(得分:1)

  

两个代码是否代表相同的东西?

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

  

int * a和int * a代表相同的东西吗?

  

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

queue<nodeptr> qqueue<node*> q相同。因此,这种比较是不合适的。

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

答案 1 :(得分:0)

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;
}

答案 2 :(得分:0)

对于你的第二个问题,我只想说你写int* aint *a,这是同一回事。

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

所有都是相同的,其中a是int类型的指针,infact int*a;也是一样...

答案 3 :(得分:0)

  1. 几乎。两者都定义了struct node,但第一个也定义了一个指向struct node的{​​{1}}指针的类型。

  2. 不,他们完全是一回事。空白或缺乏空白并不重要。

  3. 因为在第一种情况下,您声明了一个指向节点类型的指针队列,而在第二种情况下,您声明了一个类型为node的对象队列。 nodeptr可能会对queue无法满足的内容提出额外要求。如果没有看到node的来源,很难猜出它可能是什么,但也许它需要某种比较运算符来定义。如果您想了解更多信息,您应该发布示例源代码和您收到的错误消息,而不仅仅是声明状态&#39;它不起作用。