struct struct0 {
  int a;
};

struct struct1 {
  struct struct0 structure0;
  int b;
} rho;


&rho->structure0; /* Reference 1 */
(struct struct0 *)rho; /* Reference 2 */
(struct struct0)rho; /* Reference 3 */

从引用1中,编译器是否接受rho的地址,然后访问structure0,反之亦然?
参考2的线是做什么的?
由于structure0是struct1的第一个成员,引用3是否等同于引用1?

最佳答案

按照推荐人的顺序:
->的优先级高于&。你会得到rho->structure0的地址。或者更确切地说,如果rho是一个指针,您就会这样做。因为不是,所以会出现编译错误。
这是行不通的-你正在把一个结构转换成一个指针类型-你应该得到编译器的错误。
你也不能那样做。类型转换为非标量类型也是一个错误。
标准第6.5.4节涵盖了示例2和3:
除非类型名指定了void类型,否则类型名应指定qualified或
非限定标量类型,操作数应具有标量类型。
如果你把这些代码放在编译器中,你会看到相同的结果;你所显示的代码是否不是你想问的?

关于c - C语言中的运算符优先级和结构定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2459393/

10-11 21:30