讨论题:关于链表操作时参数传递问题?

heartgoon2010 2011-07-31 09:51:48
如果节点是如下类型:
typdef struct node* Node;
struct node{
Node next;
int val;
};
写插入函数时通常会有这样两种形式:
int insert(Node head,int data){ //参数Node head:头指针
...
}
int insert(Node *head,int data){ //参数Node *head:头指针地址
Node p;
p=*head;
...
}
其中省略号表示进行插入操作的代码,对于简单的链表操作函数,似乎这两种参数传递(传递Node head参数和传递Node *head参数)没有太大的区别,都能实现一样的功能,谁也不会比谁跟简单一点,但是我还是想问一下,在处理什么问题时这两种参数传递会有区别?
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-07-31
  • 打赏
  • 举报
回复
int insert(Node head,int data); // 1
int insert(Node *head,int data); // 2
函数传参方式是:传值拷贝。
举个例子:
node mynode;
insert(mynode, 5); //调用函数1,修改的mynode的复本,函数结束5没有插入mynode后面。
insert(&mynode, 5); //调用函数2,传mynode地址,函数拷贝的是地址,函数结束 5成功插入。
hackbuteer1 2011-07-31
  • 打赏
  • 举报
回复
如果在插入的时候,需要修改链表的头指针的时候,就有区别了,第一个是一级指针,不能修改头指针的地址的,而第二个是二级指针是可以修改头指针的,这个就是区别。。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧