使用指针打印链表中的节点
Printing of nodes in linked-list with pointers
4-5年后,我正在刷我的C++,在浏览这个视频(附上具体问题点截图(时,演讲者提到打印链表的代码实际上是按值调用。
但就我对指针的了解而言,Print
函数中的 head
参数不是已经是指向 main 函数中 head
地址的指针吗?在这种情况下,两个变量应共享相同的内存位置。
你能解释一下吗?
void Print(Node* head) {
struct Node* temp = head;
printf("List is: ");
while (temp != NULL) {
printf(" %d", temp->data);
temp = temp->next;
}
printf("n");
}
int main() {
Node* head = NULL; // empty list.
printf("How many numbers?n");
int n, i, x;
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Enter the number" n);
scanf("%d", &x);
Insert(x);
Print(head);
}
}
演讲者是对的。
void Print (Node *head) { ...
正在将指向 head(按值(的指针传递给 Print
函数。不要混淆引用的C++使用(例如 void Print (Node& head) {...
使用普通的旧 C "传递指针",就像在代码中所做的那样。
那么它是按值传递还是按引用传递?
C++保留了很多C遗产。在 C 中,没有按引用传递 - 它都是按值传递的。当你使用普通的旧"传递指针"和Node *head
时,你只是在传递一个指针"by-value"。Print
函数接收指针的副本。
什么,指针的副本?
是的,但请记住,指针只是一个变量,它将地址保存为其他值。因此,即使Print
获得head
的副本,副本保存的值与head
在调用函数中的地址完全相同。
node*
指定您希望传递指针,而不是节点数据的完整副本
相关文章:
- 反向给定链表中的K节点
- 我们可以删除链表中静态内存中的节点吗
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 如何按数字顺序插入链表节点?
- 为什么我的双向链表删除函数会删除多个节点?
- 创建了一个链表,但如何删除 c++ 中的"所有"节点
- 在C++的链表末尾插入一个节点
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 插入一个基本的单向链表节点似乎破坏了我的 c++ 代码?
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 删除链表中的特定节点
- 在 c++ 中,在链表节点上使用括号有什么意义?
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 删除链表中的节点 - 分段错误
- 使用函数引用指向节点的指针删除链表中的节点?
- 节点链表中的对象
- 虚拟头节点链表
- C++ 删除类似的节点链表
- c++删除节点链表导致程序崩溃
- 排序节点(链表)c++