c ++传递指针作为参数。怎么理解呢?

时间:2015-08-04 07:23:22

标签: c++

我认为followig片段中的printList函数接收指针作为参数。因此,它将修改head指针。但实际上,事实并非如此。否则,第二个printList函数根本无法打印节点,因为head指针已在第一个NULL函数中移至printList

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");
}

3 个答案:

答案 0 :(得分:5)

C ++具有值语义传递。public function mostvotedans() { $this->db->select('open_id_fk, COUNT(*) as total'); $this->db->group_by('open_id_fk'); $this->db->order_by('total', 'desc'); $query = $this->db->get('voting_ip', 5); return $query; $query = $this->db->query("SELECT * FROM country WHERE open_id_fk=open_id;"); return $query; } 对调用方没有影响,因为head = head->next;head函数的本地。从这个意义上讲,传递指针与传递printListint没有什么不同。您将获得传递的对象的本地副本。区别在于指针允许您引用非本地对象。

答案 1 :(得分:4)

参数<!doctype html> <html> <head> <title>Darren's BBC</title> <meta charset="utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style type="text/css"> body { margin:0; background-color:violet; /* This ensures the topbar stretches all the way across the screen and fills the top */ } #topbar { background-color:rgb(255,255,255); width:100%; height:40px; color:black; font-family:arial,helvetica,sans-serif; font-weight:bold; font-size:0.8em; } .fixedwidth { width:1000px; margin:0 auto; } #logodiv { padding-top:4px; padding-right:5px; padding-bottom:4px; float:left; border-right:1px solid #DDDDDD; } #signindiv { padding:8px 85px 11px 15px; float:left; border-right:1px solid #DDDDDD; } #signindiv img { position:relative; top:3px; padding-right:2px; } #menudiv ul { margin:0; } #menudiv li { padding:14px 17px 10px 17px; list-style:none; float:left; border-right:1px solid #DDDDDD; } #searchdiv { float:left; padding:8px 0 0 10px; } #searchdiv input { border:none; background-color:#E4E4E4; height:24px; width:190px; font-weight:bold; font-size:0.9em; padding:0 5px 0 5px; background-image:url("images/search.png"); background-repeat:no-repeat; background-position:right center; } #newsbar { background-color:#BB1919; height:55px; } #newsbar p { margin:0; font-size:2.7em; color:white; font-family:Verdana, Geneva, sans-serif; padding-left:50px; } .break { clear:both; } #topicdiv { margin:0; background-color:#A91717; width:100%; height:37px; } #topicdiv ul { margin:0; padding:12px 0 5px 37px; } #topicdiv li { color:white; font-family:Arial, Helvetica, sans-serif; font-size:1em; list-style:none; float:left; border-right:1px solid #B73C3C; padding-left:11px; padding-right:11px; } </style> </head> <body> <div id="container"> <div id="topbar"> <div class="fixedwidth"> <div id="logodiv"> <img src="images/bbclogo.png" /> </div> <div id="signindiv"> <img src="images/signin.png" /> Sign In </div> <div id="menudiv"> <ul> <li>News</li> <li>Sport</li> <li>Weather</li> <li>Shop</li> <li>Earth</li> <li>Travel</li> <li>More...</li> </ul> </div> <div id="searchdiv"> <input type="text" placeholder="Search" /> </div> <div class="break"></div> <div id="newsbar"> <p>NEWS</p> </div> <div class="break"></div> <div id="topicdiv"> <ul> <li>Home</li> <li>Video</li> <li>World</li> <li>Asia</li> <li>UK</li> <li>Business</li> <li>Tech</li> <li>Science</li> <li>Magazine</li> <li>Entertainment & Arts</li> <li>Health</li> <li>World News TV</li> <li style="border-right:none">More...</li> </ul> </div> </div> </div> </div> </body> </html> 获取指针的副本ListNode* head然后只修改该副本,而不是传递给函数的原始指针。

如果您需要修改原始指针,请将引用传递给它:head =

答案 2 :(得分:3)

通过这个,您可以从指针获得副本 如果你想修改指针本身你可以写这样的东西。

list2

获取指针的目的是避免复制对象本身,并且当值可以为nullptr时,通过指针而不是引用来获取它。