我在互联网上找到了这个代码,我需要一些帮助。 这是代码:
#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的指针和指向前一个的指针,不同于指向列表中节点的指针只包含节点的地址,没有任何其他数据?如果不是这样的话,那么指向列表中节点的指针与节点本身有什么不同呢?
答案 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}})。
一些程序员对此非常了解:
根据我在编写足够代码后的经验,这个解释问题会消失,甚至疯狂的C / C ++声明语法规则也很容易理解(至少在简单的情况下)。