问题:
形如这样一个通用链表的添加结点的函数:
void List_add(NODE_T *head,void *data)
{
//新建一个结点
NODE_T *newnode = NULL;
newnode = (NODE_T*)malloc(sizeof(NODE_T));
if(!newnode)
{
printf("开空间失败!\n");
exit(0);
}
memset(newnode,0x0,sizeof(NODE_T));
newnode->next = NULL;
//赋值
newnode->data = data;
//找到尾结点
while(head->next)
{
head = head->next;
}
//添加结点
head->next = newnode;
}
其中并没有设置临时变量获取head的值,而是对head直接修改,head不是指针嘛?为什么可以这样直接对head进行修改,而不用担心会不会影响函数外部的head呢?
while(head->next)
{
head = head->next;
}
原因如下:
1.从逻辑上来推,参数传递可以分为值传递和地址传递,如果函数内部改变不影响外部,那么一定是值传递。所以传进去的是head的值。