简单来说就是
&someObject->someAttribute.someMember;
相当于
&(someObject->someAttribute.someMember);
或者
(&someObject)->someAttribute.someMember;
或者
(&(someObject->someAttribute)).someMember;
或者你真的应该把明确的括号放在那里只是为了安全吗?
简单来说就是
&someObject->someAttribute.someMember;
相当于
&(someObject->someAttribute.someMember);
或者
(&someObject)->someAttribute.someMember;
或者
(&(someObject->someAttribute)).someMember;
或者你真的应该把明确的括号放在那里只是为了安全吗?
它相当于:
&((someObject->someAttribute).someMember)
->
和具有相同的.
优先级并且是左结合的。一元-&
具有较低的优先级。
如果您有非常复杂的表达式,那么您当然应该使用括号来对事物进行分组并阐明您的代码。不过,这并不是特别复杂。在 C 和 C++ 中看到这样的代码是很常见的。
见维基百科
向下滚动到操作员部分。图表中较高方框中的运算符优先于较低方框中的运算符。另请参阅关联性规则。
或者你真的应该把明确的括号放在那里只是为了安全吗?
这在某种程度上是一个偏好问题,但作为一般规则,如果您在弄清楚它时遇到任何困难,那么其他人也会这样做。有疑问时加括号。
如果你想要 someMember 的地址,那么 &(someObject->someAttribute.someMember) 或 &someObject->someAttribute.someMember。
首先是 someObject->someAttribute,其次是它的成员 somMember,第三是 & 地址
结构 xxx { int xx; }; 结构温度 { int x; 结构 xxx ptr; };
struct temp t1 = {125,{127}};
struct temp *t2 = &t1;
printf("%d %d",t2->x,*&t2->ptr.xx);