假设我有一个如下所示的结构:
struct node{
node *next;
int data;
}
我在class Stack
中有一个C ++函数,用于定义push
操作,如:
void Stack::push(int n){
node *temp = new node;
temp->data = n;
temp->next = top;
top = temp;
if(topMin == NULL) {
temp = new node;
temp->data = n;
temp->next = topMin;
topMin = temp;
return;
}
if(top->data < topMin->data) {
temp = new node;
temp->data = n;
temp->next = topMin;
topMin = temp;
}
return;
}
使用
之间的区别是什么node *temp = new node;
和
temp = new node;
在上面的代码中?更具体地说,我对这个含义感到困惑。
如果temp是pointer(*)
,我理解
temp->data
只是取消引用指向struct((*temp).data
)的指针。同样的,
使用temp = new node
是什么意思?
这只是代表性的差异吗?
答案 0 :(得分:5)
temp
声明temp = new node;
并初始化它,而
{{1}}
分配给已经声明的变量,因此编译器已经知道它是什么类型。
答案 1 :(得分:0)
第一个在本地范围内声明一个名为“temp”的新变量,并将其初始化为指向动态范围内对象的新实例。
第二个将名为“temp”的现有变量初始化为指向动态范围内对象的新实例。变量的现有内容被破坏。
与您的问题无关:显示的代码可能存在内存泄漏。
答案 2 :(得分:0)
没有区别。它们是同一个变量。
下面:
node *temp = new node;
您已将temp
声明为node*
并使用new
分配了内存,然后将此分配的内存分配给它。
temp = new node;
您分配了新内存,并将内存的地址分配给temp
,node*
仍为node *temp = new node;
。