指向列表VS元素本身中元素的指针

时间:2016-10-26 05:43:46

标签: c++ doubly-linked-list

我在互联网上找到了这个代码,我需要一些帮助。 这是代码:

#include<iostream>
using namespace std;

/* Linked list structure */
struct list {
struct list *prev;
int data;
struct list *next;
} *node = NULL, *first = NULL, *last = NULL, *node1 = NULL, *node2 = NULL;

class linkedlist {
public: 

    /* Function for create/insert node at the beginning of Linked list */
    void insert_beginning() {
        list *addBeg = new list;
        cout << "Enter value for the node:" << endl;
        cin >> addBeg->data;
        if(first == NULL) {
            addBeg->prev = NULL;
            addBeg->next = NULL;
            first = addBeg;
            last = addBeg;
            cout << "Linked list Created!" << endl;
        }


        else {
            addBeg->prev = NULL;
            first->prev = addBeg;
            addBeg->next = first;
            first = addBeg;
            cout << "Data Inserted at the beginning of the Linked list!" << endl;
        }
    }

我不明白的是,当他创建新的Node对象(在这种情况下是 addBeg )时,他正在将一个指针运算符放在它前面。我现在如何看待它,不应该在没有'*'之前创建对象的名称和数据,指向next的指针和指向前一个的指针,不同于指向列表中节点的指针只包含节点的地址,没有任何其他数据?如果不是这样的话,那么指向列表中节点的指针与节点本身有什么不同呢?

2 个答案:

答案 0 :(得分:1)

在代码中完成的方式是正确的。您的理解不正确,因为无法通过指向该节点的指针访问节点的数据。

如果addBeg是指向new list返回的节点的指针,则可以使用运算符->访问该节点的数据:

list.data相当于addBeg->data

If that's not the case, then what is the thing that differs the pointer to the node in the list from the node itself ?

=&GT; addBeg是指向对象的指针,该对象由new List返回。

答案 1 :(得分:0)

你没有正确解释这个C ++声明......代码的含义

 list *addBeg = new list;

 list* addBeg;
 addBeg = new list;
换句话说,

list*addBeg的类型。

请注意,规则确实很奇怪,因为*逻辑上附加到第一个list以形成类型,

的含义
list *a, b;

a声明为“指向列表的指针”,而b将声明为“列表实例”(因此其含义附加到list,但明星本身附加到{{ 1}})。

一些程序员对此非常了解:

  1. 他们总是将星星附加到类型(左侧)
  2. 他们从不在同一个构造中声明两个变量
  3. 根据我在编写足够代码后的经验,这个解释问题会消失,甚至疯狂的C / C ++声明语法规则也很容易理解(至少在简单的情况下)。