澄清c ++中的指针

时间:2014-12-27 23:48:33

标签: c++ pointers

这里我有一些我遇到问题的代码:

struct Node 
{
String data;
Node * next;
};

struct List
{
Node * head;
};

static Node  * nouvNode (string word,Node *p = nullptr){
Node  *pNouv = new Node ;
pNouv->data =word;
pNouv->next = p;
return pNouv;

好吧,这是我的问题:

1)pNouv这是我创建的指针,指向一个节点。 当我做pNouv=>next=p时,是否意味着我在pNouv中的指针指向指针p指向的下一个节点?或者我的指针指向一个注释,它也有一个指针指向另一个节点,其中P指向同一个方向?

2)static Node * nouvNode (string word,Node *p = nullptr) 这是一种创建包含数据的新节点的方法,但为什么需要有" Node * p = nullptr"在参数? 当我在程序中创建节点时,我会执行此操作nouvNode(word, ls.head)

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

1)pNouv->next = p表示由next指向的结构中的结构成员pNouv设置为指向与p相同的内容。所以有一块内存。 pNouv指向那块内存。在该内存块的某处,您可以放置​​p的地址。

2)= nullptr加法使该参数可选。您可以有效地致电nouvNode(word),并且您会收到一个值为word的节点,该节点未指向下一个节点。

答案 1 :(得分:0)

 pNouv->next=p  

根据我的理解,如果执行上述语句pNouv节点开始指向p节点,这只是NULL。所以上面的代码语句相当于

pNouv=>next=NULL;

2)static Node * nouvNode (string word,Node *p = nullptr)

传递Node *p = nullptr作为第二个参数是可选的。 你只需要word。您始终可以在函数体中创建一个新节点,并从头部遍历,然后最终将新创建的节点定位在所需位置。