首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个链表的有关问题

2012-04-15 
请教一个链表的问题struct node{char datanode* next}node* search(node* head,char keyword){node* pre

请教一个链表的问题
struct node
{
char data;
node* next;
}
node* search(node* head,char keyword)
{
node* pread=head;
while(pread!=NULL)
{
if(pread->data==keyword)
{
return pread;
}
pread=pread->next;
}return NULL;
}
void insert(node* &head,char keyword,char newdata)
{
node* newnode=new node;
newode->data=newdata;
node*pguard=search(head,keyword);
if(head==NULL||pguard=NULL)
{
newnode->next=head;
head=newnode;
}
else
{
newnode->next=pguard->next;
pguard->next=newnode;
}
}
详细的程序我没写,就写了我不明白的地方,书上说如果node* &head改成
node* head 那么将不可行,我想问下这里的原因是什么,这个可能是我的基础不行,请知道的大侠详细解说下啊,详细点哦!!!谢谢了!~~

[解决办法]
void insert(node* &head,char keyword,char newdata)

传引用和传值问题。
传值会生成副本,如果函数里改变head的指向head=newnode;,改变的只是副本,实参没变
[解决办法]

探讨
引用:
你这个插入的意思是如果不存在keyword,要把新节点插到开头成为新的头结点,要改变原链表头结点位置需要用引用啊,否则在函数里的改变是无效的

汗,你这个给我的应该是无条件接受,我想知道为什么要用引用,指针不行吗?能说点原理性的东西吗

[解决办法]
如果改成了*head的话,那么主函数当中调用的时候,只能给被调用的参数传参数,但却传不出来,也就是说,是单向传递,是无效的,即就是说你虽然在主函数当中调用了这个函数插入了数据,但是出了这个被调用的函数以后,就相当于你还没有插入数据,也就是说你调用那个函数的工作是无效的,所以只能调用地址,这样才是双向传递,有传入和传出。才不会做无效功
[解决办法]
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

热点排行
Bad Request.