struct和指向struct的指针之间的区别

时间:2016-08-29 13:35:07

标签: c++ pointers struct

假设我有一个如下所示的结构:

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是什么意思?

这只是代表性的差异吗?

3 个答案:

答案 0 :(得分:5)

temp

声明temp = new node; 并初始化它,而

{{1}}

分配给已经声明的变量,因此编译器已经知道它是什么类型。

答案 1 :(得分:0)

第一个在本地范围内声明一个名为“temp”的新变量,并将其初始化为指向动态范围内对象的新实例。

第二个将名为“temp”的现有变量初始化为指向动态范围内对象的新实例。变量的现有内容被破坏。

与您的问题无关:显示的代码可能存在内存泄漏。

答案 2 :(得分:0)

没有区别。它们是同一个变量。

下面:

node *temp = new node;

您已将temp声明为node*并使用new分配了内存,然后将此分配的内存分配给它。

 temp = new node;

您分配了新内存,并将内存的地址分配给tempnode*仍为node *temp = new node;