gpt4 book ai didi

c++ - 使用指针打印链表中的节点

转载 作者:行者123 更新时间:2023-11-30 03:24:53 24 4
gpt4 key购买 nike

4-5 年后,我正在重温我的 C++,在观看这段视频(附上具体问题点的屏幕截图)时,演讲者提到了打印链表的代码实际上是在进行按值(value)调用

但就我对指针的了解而言,head 不是吗? Print 中的参数函数已经是指向 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 使用普通的“传递指针”时,您只是在“按值”传递指针。 Print 函数接收指针的拷贝

什么,指针的拷贝?

是的,但请记住,指针只是一个变量,它保存指向其他对象的地址作为它的值。因此,即使 Print 获得了 head 的拷贝,该拷贝保存的值与 head 在调用函数中的地址完全相同。

关于c++ - 使用指针打印链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49394076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com