c ++中这两种声明的区别

时间:2014-12-16 14:35:39

标签: c++

这个结构

struct node{
int no;
node *next;
};

这两种声明之间有什么区别?

node *New=new node;

node *New;

4 个答案:

答案 0 :(得分:2)

node *New=new node;

这是初始化指针,这是值得记住的好事。

尽管

node *New;

这不是一件坏事,因为有机会以它的裸体形式取消它。

答案 1 :(得分:2)

node *New=new node;

创建一个名为New的变量,并使用指针对其进行初始化,由operator new

返回
node *New;

取决于上下文,对于名称空间(全局)上下文创建一个变量,由nullptr初始化,或者为本地创建一个未初始化的。

答案 2 :(得分:0)

您应该在声明变量时始终初始化变量,以便您知道它是一个很好的知道状态。使用指针时要抓住" new"指针创建时的内存或使用nullptr。

node * New = new node; // Okay. We know New holds a good node and we can call delete on it
node * New = nullptr; // Okay. We know we can delete on it without crashing
node * New; // Bad.  We dont know what the state of New is and we can't call delete on it

答案 3 :(得分:-2)

两者都点头*新=新节点;和节点*新;是无效的声明类型。它允许行的原因是因为程序员已将关键字声明为声明的结构。它们都是糟糕的代码行。到目前为止你所拥有的是一个指向新结构的指针(但不是真的)。 New是一个关键字,它实例化一个优先级高于代码块当前范围的对象。每当最终创建一个对象时,必须使用delete关键字取消它。