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

时间:2018-03-20 21:04:08

标签: c++ pointers linked-list

我在4到5年之后刷新我的C ++并在浏览这个视频时(附带特定问题点截图),发言者提到打印链表的代码实际上是按价值进行调用

但就我对指针的了解而言,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);
    }
}

2 个答案:

答案 0 :(得分:2)

说话者是对的。

void Print (Node *head) { ...

将指向head(按值)的指针传递给Print函数。不要像在代码中那样混淆C ++对引用的使用(例如void Print (Node& head) {...与普通的旧C“传递指针”。

它是通过值传递还是通过引用传递?

C ++保留了很多C传承。在C中没有通过引用传递 - 它都是通过值传递的。当您使用普通的“传递指针”Node *head时,您只需传递一个“by-value”指针。 Print函数接收指针的副本

什么,指针的副本?

是的,但回想一下,指针只是一个变量,它将地址保存为其他值的值。因此,即使Print获得head的副本,副本所拥有的值与head在调用函数中的地址完全相同。

答案 1 :(得分:0)

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