这两个代码片段相似,但显示的结果不同
These two code snippets are similar but show different results
第一个代码片段
void insert_last(Node* head,int new_data)
{
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = NULL;
if(head == NULL)
{
head = new_node;
return;
}
Node *cur = NULL;
cur = head;
while(cur->next!=NULL)
{
cur = cur->next;
}
cur->next = new_node;
}
第二个:
void insert_last(Node** head,int new_data)
{
Node* new_node = new Node();
new_node->data = new_data;
new_node->next = NULL;
if(*head == NULL)
{
*head = new_node;
return;
}
Node *cur = NULL;
cur = *head;
while(cur->next!=NULL)
{
cur = cur->next;
}
cur->next = new_node;
}
该类称为具有两个数据成员的节点
- 数据(类型=整数(
- *下一个(类型 = 节点(
这两个代码片段在调用时显示不同的结果以及使用哪一个的原因是什么?
我也是C++新手,但这就是我的想法。
传递Node** head
会将指针传递到指针,从而确保在本地范围之外更改头部指针。
通过引用查看传递指针。
在第一个code_snippit中,我相信您需要返回更新的头部指针以获得所需的结果,而第二个截图会修改本地范围之外的数据。
Node**head
是指向指针的指针,Node*&head2
是对指针的引用,因此Node**head
将按值传递指向指针的指针。
在第一个代码段中,按值传递指针,在函数内更改此指针不会更改传递给函数的指针。 在第二个代码段中,按值传递指向指针的指针。 将取消引用的指针更改为指针(您这样做(:*head = new_node;
将有效地将指针更改为指向Node
。
在第一个代码段中head = new_node;
更改按值传递的指针的值,对此指针的更改只是本地的。 您是否通过引用传递此指针,如下所示:
void insert_last(Node* &head,int new_data)
那么这两个函数的行为将相同
相关文章:
- 代码未在联机编译器上显示结果
- 我的循环超时并且不显示结果
- C 可执行文件从浏览器下载而不是显示结果
- 如果满足嵌套条件,则计算结果未显示结果C
- 使用 std::async 准备好后立即显示结果
- if, else if, else 函数未准确显示结果
- C++:如何在控制台窗口中显示结果
- VIM:执行复杂文件类型的脚本和显示结果
- 根据标准对结构向量进行排序,然后显示结果
- c++将var从一个函数传递到另一个函数,然后在主函数中显示结果
- 当结果超过 100 时,程序不显示结果
- 对输入'age'名称进行排序,然后显示结果
- 代码可以运行,但不在 Eclipse 中显示结果。
- 将代码C++到 MIPS 中,MIPS 中的代码运行时没有错误消息,但不显示结果
- 为什么使用 scanf() 时显示结果有延迟
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- C++不显示结果
- 最长公共子序列没有显示结果
- C++需要在Main()调试中显示结果的帮助
- C/C++读取UART端口并显示结果