把地址作为形参进行传递时..函数可以修改形参..从而修改实参..(比如数组传递)
但是最近自己在写链表时..发现以下问题..当我用head作为形参传递至deletef函数(删除节点)时..不能修改head的地址..(困惑)..代码如下:
void deletef(struct person *head)//单链.在main函数中建立..首地址head传入函数修改
{
struct person *p,*q;
int n;
p=q=head;
scanf("%d",&n);
while ((q!=NULL)&&((*q).num!=n))
{
p=q;//进行扫描
q=(*q).next;
}
if (q==NULL) printf("No Change\n");
else
{
if (q==head) head=(*q).next;//这个地方测试不能修改head的地址..
else if ((*q).next==NULL) (*p).next=NULL;
else (*p).next=(*q).next;
}
}
以上通过输出测试错误如下:
比如链表已经为1 2 3 4 5 6 NULL
然后输入1..无法删除1..仍然显示1 2 3 4 5 6 NULL
但是其他数据正常..(比如输入2,3,4,5,6)
不知道是什么原因?我可以通过返回地址指针解决这个问题..但是不知道产生这个问题原因..求高人解答..谢谢..