链表问题,调用函数,如果传进去的不是指针引用,形参改变是不是实参没有改变? 20

如图,为什么调用后实参也变了求助... 如图,为什么调用后 实参也变了
求助
展开
 我来答
tekky_cn
2019-11-11
知道答主
回答量:13
采纳率:40%
帮助的人:6.1万
展开全部

楼下说得不太对哦,使用一般参数,因为传递的是指针,所以你对链表做的更改是有效的,但是你却不能对这个指针本身做修改,但是使用引用参数的话你是可以对这个指针本身做修改的。刚好这几天做数据结构题目时就是因为一个引用导致程序出了问题,楼主可以把这段代码复制过去运行一下,第9行那里使用了引用,你可以试试把引用符号去掉看看,去掉后运行结果会让你惊讶的

#include <iostream>
#include <cstdlib>
template<typename T>
struct Node {
 T data;
 struct Node<T> *next;
};
template<typename T>
bool sortList(struct Node<T>*& L, bool upper) {
 struct Node<T>* newHead = new struct Node<T>;
 struct Node<T>* r = newHead;
 struct Node<T>* p = L->next;
 struct Node<T>* q;
 T temp;
 while (p) {
  temp = p->data, q = p;
  p = p->next;
  while (p) {
   if (upper ? temp > p->data : temp < p->data) {
    temp = p->data;
    q = p;
   }
   p = p->next;
  }
  for (p = L; p->next != q; p = p->next)
   ;
  p->next = q->next;  //delete smallest node from the old List
  q->next = NULL;
  r->next = q;        //link the smallest node to a new List
  r = r->next;
  p = L->next;
 }
 delete L;
 L = newHead;
 return true;
}
int main(int argc, char const *argv[])
{
 struct Node<int>* head = new struct Node<int>;
 struct Node<int>* p = head;
 int array[] = {2, 1, 5, 4, 9, 8, 6, 7, 3};
 for (int i = 0; i < 9; ++i) {
  p->next = new struct Node<int>;
  p = p->next;
  p->data = array[i];
  p->next = NULL;
 }
 p = head->next;
 while (p) {
  std::cout << p->data << " ";
  p = p->next;
 }
 sortList(head, false);
 putchar('\n');
 p = head->next;
 while (p) {
  std::cout << p->data << " ";
  p = p->next;
 }
 return 0;
}
匿名用户
2016-08-05
展开全部
你传递的不就是指针,指针的作用就是用来间接修改数据的,有什么问题么?
追问
那传递指针引用区别在哪
追答
引用是C++才有的,本质上两者一样
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式