我在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);
}
}
答案 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*
指定您希望指针,而不是要传递的节点数据的完整副本