让我说有这些:
struct element
{
char buffer[100];
int key;
};
然后我有这个功能:
int findNext(element* searchValue)
{
element* current;
//some code here
*current=*searchValue;//statement a
current=searchValue;//statement b
//some code here
}
我只是想知道a和b之间有什么不同?谢谢
答案 0 :(得分:3)
第一个语句用element
指向的current
中存储的数据覆盖存储在searchValue
指针的内容。由于current
尚未初始化,因此未定义行为。
第二个语句将current
指向与element
指向的searchValue
相同的current
。即使{{1}}尚未初始化,也允许这样做。
以下是说明差异的图表:
答案 1 :(得分:0)
在声明a中,您正在复制值。即,searchValue指向的地址处的值被复制到当前指向的位置。
在语句b中,您将searchValue内容的地址复制到当前。
答案 2 :(得分:0)
*current=*searchValue
此语句取消引用指针searchValue
并将其分配给current
指向的变量。基本上current
的值不受影响(存储的地址保持不变),current
指向的数据会发生什么变化。
current=searchValue
这里你只使用指针(地址),而不是他们指向的数据。您只需将current
值设置为searchValue
即可。在语句之后,两个变量都指向相同的内存地址,实际上是current == searchValue
(第一个语句不是这样)。
答案 3 :(得分:0)
* current属于element
类型。 current
是指向元素的指针。
在您的代码声明中
*current=*searchValue;//statement a
将searchValue
指向的地址中存储的值分配到current
指向的地址位置。
陈述b
current=searchValue;//statement b
使current
指向的地址等于searchValue
指向的地址(element
类型的地址)