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

Printing of nodes in linked-list with pointers

本文关键字:节点 链表 打印 指针      更新时间:2023-10-16

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*指定

您希望传递指针,而不是节点数据的完整副本