指针做形参时要注意的一个地方
2012-04-26 20:10
399 查看
Linklist deleteNode(Linklist head, Linklist toDelete, type *data)
{
Linklist temp = head;
if(temp->Next != toDelete)
{
temp = temp->Next;
}
data = &(temp->Next->data);
temp->Next = temp->Next->Next;
free(toDelete);
return temp->Next;
}
上面这段程序在main()中由以下语句调用:
type deleteData = 1;
head = deleteNode(head, NODE, &deleteData);
printf("%d\n", deleteData);
调用后发现发现deleteData的值始终是1!
于是将代码改为
Linklist deleteNode(Linklist head, Linklist toDelete, type *data)
{
Linklist temp = head;
if(temp->Next != toDelete)
{
temp = temp->Next;
}
(*data) = temp->Next->data;
temp->Next = temp->Next->Next;
free(toDelete);
return temp->Next;
}
这样deleteData的值就会变成temp->Next->data的值了!
原来deleteNode(Linklist head, Linklist toDelete, type *data)函数是用一个四字节的内存存放了deleteData的地址,也就是形参data,第一段代码中语名data = &(temp->Next->data);的作用是将该内存的内容改成了temp->Next->data的地址,而跟deleteData变量没有任何关系!
而后面那段代码中的语句(*data) = temp->Next->data;则是将该内存里面的地址所指的变量(也就是deleteData)的值改成temp->Next->data,这显然是对的!
{
Linklist temp = head;
if(temp->Next != toDelete)
{
temp = temp->Next;
}
data = &(temp->Next->data);
temp->Next = temp->Next->Next;
free(toDelete);
return temp->Next;
}
上面这段程序在main()中由以下语句调用:
type deleteData = 1;
head = deleteNode(head, NODE, &deleteData);
printf("%d\n", deleteData);
调用后发现发现deleteData的值始终是1!
于是将代码改为
Linklist deleteNode(Linklist head, Linklist toDelete, type *data)
{
Linklist temp = head;
if(temp->Next != toDelete)
{
temp = temp->Next;
}
(*data) = temp->Next->data;
temp->Next = temp->Next->Next;
free(toDelete);
return temp->Next;
}
这样deleteData的值就会变成temp->Next->data的值了!
原来deleteNode(Linklist head, Linklist toDelete, type *data)函数是用一个四字节的内存存放了deleteData的地址,也就是形参data,第一段代码中语名data = &(temp->Next->data);的作用是将该内存的内容改成了temp->Next->data的地址,而跟deleteData变量没有任何关系!
而后面那段代码中的语句(*data) = temp->Next->data;则是将该内存里面的地址所指的变量(也就是deleteData)的值改成temp->Next->data,这显然是对的!
相关文章推荐
- 智能指针变量做函数参数的一个值得注意的地方
- 智能指针变量做函数参数的一个值得注意的地方
- 一个存储对象的数组要注意的地方: 存储的对象不要空指针异常了
- 形参中的数组,实际是一个指针。sizeof为4,其他地方为数组大小
- 关于cin.ignore()函数的一个需要注意的地方
- C++ 构造函数使用 ":成员变量(形参)" 的形式给类里面成员变量赋值,如果成员变量和形参是指针,那么需要注意的事项
- Ext+struts2一个简单的文件上传要注意的地方
- stsadm -o export 命令的一个需要注意的地方
- 创建一个Spring+SpringMVC+MyBatis+MySql+Maven项目需要注意的地方
- ajax post中在firefox返回值一个值得注意的地方
- Delphi函数翻译成VC要注意句柄指针传递(传递Handle的时候,必须加上一个指针引用,才能消除编译错误)
- JQuery 中 next() 方法,需要注意的一个地方
- 模板继承中注意的一个问题,只能使用指针或引用的形式
- 由一个网友的问题想到的(指针作为形参, p++ 和 p + 1的区别 )
- 二分查找,要注意的地方--写一个正确的二分查找,并不简单
- 指针的类型(需要注意的一些地方)
- (TIP)service使用process类调用bat文件时应该注意的一个地方
- struts2+spring中注入的一个要注意的地方
- 关于vim文件格式的一个需要注意的地方
- 关于Qt中QMap的一个需要注意的地方