【问题标题】:Difference between node = node->next vs *node = *(node->next)?node = node->next vs *node = *(node->next)之间的区别?
【发布时间】:2020-08-12 06:55:51
【问题描述】:

这两行C代码有什么区别?

node = node->next; 
*node = *(node->next);

node是一个链表Node结构体,定义如下:

struct Node{
     int data;
     Node* next;
};

Node* node;

【问题讨论】:

  • 您发布的代码不是有效的 C(但它是有效的 C++)。您是否可能使用 C++ 而不是 C?
  • 我猜node是指向Node结构的指针,即Node * node;

标签: c++ c linked-list


【解决方案1】:

第一个代码sn-p,node = node->next;,是一个指针赋值。也就是说,当前在node 中的地址值将被替换为node->next 中的地址。

第二个sn-p,*node = *(node->next);解引用指针,并将RHS指向的结构的实际数据复制到LHS指向的结构中指着。这将等同于以下内容:

node->data = node->next->data;
node->next = node->next->next;

注意:在第二种情况下,node 包含的地址不会改变;也就是说,它仍然指向内存中的相同位置,但该内存的内容会发生变化。在第一种情况下,node 将指向不同的(可能)内存位置,而旧位置的内容将保持不变。

【讨论】:

    【解决方案2】:

    指针与值。第一个将node 指针分配给node->next 处的指针。第二个你取消引用*(node->next) 的值,这意味着你获取它的值,并将它分配给节点的值。

    【讨论】:

      【解决方案3】:
      node = node->next;
      

      您将指针分配给指针。

      *node = *(node->next);
      

      这是指针的解引用。它将node 的值分配给下一个节点node->next 的值。

      看下图:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多