c++传递指针作为参数.如何理解它
c++ pass pointer as parameter. How to understand it?
我认为下面代码片段中的printList
函数接收指针作为参数。因此,它将修改head
指针。但实际上,它不是。否则,第二个printList
函数根本无法打印节点,因为在第一个printList
函数中,head
指针已经移动到NULL
上。
ListNode * head = new ListNode(-1);
push(head, 5);
push(head, 20);
push(head, 4);
push(head, 3);
push(head, 30);
printf("%x", head);
printList(head);
printf("%x", head);
void printList(ListNode *head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("n");
}
c++有按值传递语义。head = head->next;
对调用方没有影响,因为head
对printList
函数来说是本地的。从这个意义上讲,传递指针与传递int
或double
没有什么不同。您将获得传入对象的本地副本。不同之处在于指针允许您引用非局部对象。
参数ListNode* head
接受指针副本。然后,head =
只修改该副本,而不修改传递给函数的原始指针。
如果需要修改原始指针,传递一个引用给它:ListNode*& head
这样,您就从指针中获得了一个副本。
如果你想修改指针本身,你可以这样写。
void printlist(ListNode*& head)
获取指针的目的是为了避免复制对象本身,当值可以为nullptr时,可以通过指针而不是引用来获取。
相关文章:
- 有人可以帮助我理解这些参数/参数吗?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 难以理解C++中 inet_ntop() 的第二个参数
- C 理解`emove_if()`的第三个参数
- 如何理解函数定义作为参数
- 类字符串流.无法理解lineStream的工作原理及其参数
- C++理解模板的确切语义,尤其是函数参数
- 初学者C++难以理解我所有教师函数中的参数
- 需要帮助理解构造函数参数和静态变量
- 代码分析不理解_In_opt_参数注释?
- 试图理解传递给函数的参数的求值(如果涉及一些算术运算)
- 如何理解函数函数参数中的星号(*)?
- 如何理解C++隐式参数"this"
- 需要帮助来理解具有复杂typename参数的模板函数
- 请帮助我理解这个带有参数的C++参数声明
- opencv:理解cvsetcaptureproperty函数和参数
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 理解std::stack的容器模板参数
- 理解非类型模板参数
- c++传递指针作为参数.如何理解它