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?
答案 0 :(得分:4)
按照您的推荐顺序:
->
的优先级高于&
。您将获得rho->structure0
的地址。或者更确切地说,如果rho
是一个指针,你会想。既然不是,你就会遇到编译错误。您的示例#2和#3包含在标准6.5.4节中:
除非类型名称指定了void类型,否则类型名称应指定qualified或 不合格的标量类型和操作数应具有标量类型。
如果你在编译器中放入任何代码,你会看到相同的结果;你所展示的代码不是你想要提出的问题吗?
答案 1 :(得分:2)
&rho->structure0; /* Reference 1 */
(struct struct0)rho; /* Reference 3 */
(struct struct0 *)rho; /* Reference 2 */
所有三个参考都不对:
rho->structure0
但是
(&rho)->structure0
(struct
struct0)rho;
但(struct struct0
*)&rho
我真的不明白你想做什么,所以我帮不了你。