这两个陈述之间有什么不同

时间:2014-02-17 03:52:21

标签: c++ pointers

让我说有这些:

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之间有什么不同?谢谢

4 个答案:

答案 0 :(得分:3)

第一个语句用element指向的current中存储的数据覆盖存储在searchValue指针的内容。由于current尚未初始化,因此未定义行为。

第二个语句将current指向与element指向的searchValue相同的current。即使{{1}}尚未初始化,也允许这样做。

以下是说明差异的图表:

enter image description here

答案 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类型的地址)