这两行C代码有什么区别?
node = node->next;
*node = *(node->next);node是一个链接列表节点结构,定义如下:
struct Node{
int data;
Node* next;
};
Node* node;发布于 2020-04-28 12:55:03
第一个代码段,node = node->next;,是指针赋值。也就是说,当前在node中的地址值将被替换为node->next中的地址。
第二个片段*node = *(node->next);取消指针,并将RHS指向的结构的实际数据复制到LHS指向的结构中。这相当于以下内容:
node->data = node->next->data;
node->next = node->next->next;注意:在第二种情况下,node包含的地址不会改变;也就是说,它仍然指向内存中的相同位置,但是该内存的内容将被更改。在第一种情况下,node将指向不同的(可能)内存位置,旧位置的内容将保持不变。
发布于 2020-04-28 12:51:57
node = node->next;将指针分配给指针。
*node = *(node->next);这是取消指针的引用。它将node的值分配给下一个节点node->next的值。
看下面的图片:

发布于 2020-04-28 12:53:38
指针对值。第一个您将node指针分配给node->next的指针。第二种方法是取消引用*(node->next)的值,这意味着您获取了它的值,并将其分配给节点处的值。
https://stackoverflow.com/questions/61480577
复制相似问题