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

如果参数很复杂,*和&运算符的作用是什么?

  •  2
  • bastibe  · 技术社区  · 14 年前

    很简单,就是

    &someObject->someAttribute.someMember;
    

    相当于

    &(someObject->someAttribute.someMember);
    

    (&someObject)->someAttribute.someMember;
    

    (&(someObject->someAttribute)).someMember;
    

    或者你真的应该把显式括号放在那里只是为了安全?

    3 回复  |  直到 14 年前
        1
  •  10
  •   James McNellis    14 年前

    相当于:

    &((someObject->someAttribute).someMember)
    

    这个 -> . 具有相同的优先级,并且左关联。一元- & 优先级较低。

        2
  •  3
  •   John Dibling    14 年前

    看到了吗 Wikipedia

    向下滚动到operators部分。图表中较高框中的运算符优先于较低框中的运算符。另请参见关联性规则。

    这是一个偏好的问题,但作为一个一般规则,如果你有任何困难弄清楚,那么其他人也会。有疑问时加括号。

        3
  •  0
  •   Muthuraman    14 年前

    如果需要someMember的地址,则&(someObject->someAttribute.someMember属性)或某个对象->someAttribute.someMember属性.

    地址

    结构xxx{ 内景xx; 结构温度{ 整数x; 结构xxx ptr;

        struct temp t1 = {125,{127}};
        struct temp *t2 = &t1;
        printf("%d %d",t2->x,*&t2->ptr.xx);