整个链表作为形参 传递
#include<stdio.h>#include<conio.h>typedefstructlnode{intn;structlnode*next;}*linklist...
#include<stdio.h> #include<conio.h> typedef struct lnode { int n; struct lnode *next; }*linklist,lnode; void nochange(lnode l) { l.n=3; l.next->n=4; } int main() { linklist l; l=(linklist)malloc(sizeof(lnode)); l->n=1; l->next=(linklist)malloc(sizeof(lnode)); l->next->n=2; printf("%d",l->n); printf("%d\n",l->next->n); nochange(*l); printf("%d",l->n); printf("%d",l->next->n); getch(); } 这样也不能达成目标,只是传入了第一个节点首地址,next中下一个地址值没有变,怎么能完全把一个链表作为形参处理? 如不想伤害原来链表,难道只能复制链表?
展开
2个回答
展开全部
你的看法没有错,因为你的程序仅仅拷贝了第一个节点,而第二个乃至以后的节点仍然会受到影响。我想这里涉及到一个程序设计的问题,直观上说如果你不复制第二个练表,不可能让一个如你的nochange()函数不去改变第一个练表值的。原因很简单,你的nochange()修改了练表节点的值,这个修改假如不影响你原来的练表,自然应该是复制出来的第二个练表。比如你的程序复制了头节点,所以头节点没受影响,但是没有复制第二节点,第二个节点的操作当然是原来练表的节点。假如你仅仅想保护以前的练表内容不被修改,建议你考虑c++的数据隐藏,即将数据定义成private并提供读的接口。假如你需要修改练表的值做一些事情,又希望最后能保留练表的初始状态,只能或者复制一个练表,或者保存练表的初始状态,最后恢复。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询