代码之家  ›  专栏  ›  技术社区  ›  Josh

右箭头等于右箭头

  •  0
  • Josh  · 技术社区  · 6 年前

    我在某人的代码中看到了一些我不理解的东西。它在返回声明中说了什么?

    static cell_ptr UD_self(cell_ptr c) { return c->U = c->D = c; }
    

    定义如下:

    struct cell_s;
    typedef struct cell_s *cell_ptr;
    struct cell_s {
        cell_ptr U, D, L, R;
        int n;
        union {
            cell_ptr c;
            int s;
        };
    };
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   DodgyCodeException    6 年前

    这只是一种简写方式:

    {
        c->D = c;
        c->U = c->D;
        return c->U;
    }
    

    声明 return c->U = c->D = c; 因为赋值运算符 = 返回刚分配的值。然后在下一个赋值中使用该值。它从右向左关联,所以它的意思是 return (c->U = (c->D = c));