繁体   English   中英

C语言中的运算符优先级和结构定义

[英]Operator precedence and struct definition in C

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. 从参考文献1开始,编译器是否获取rho的地址,然后访问structure0,反之亦然?

  2. 参考2处的线有什么作用?

  3. 由于structure0是struct1的第一个成员,因此引用3等同于引用1吗?

按照您的参考顺序:

  1. ->优先级比&优先级高。 您将获得rho->structure0的地址。 或者说,如果rho是一个指针,那么您会。 既然不是,您将得到一个编译错误。
  2. 那是行不通的-您正在将结构转换为指针类型-这样做会导致编译器错误。
  3. 你也不能那样做。 转换为非标量类型也是一个错误。

您的示例#2和#3包含在标准的6.5.4节中:

除非类型名称指定了void类型,否则类型名称应指定合格或不合格的标量类型,并且操作数应具有标量类型。

如果将任何代码放在编译器中,您将看到相同的结果。 显示的代码不是您要询问的内容吗?

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

这三个参考都不正确:

  • rho不是指针。 所以你不能做rho->structure0但是(&rho)->structure0
  • 您不能将变量转换为指针,因此不能执行(struct struct0)rho; 但是(struct struct0 *)&rho

我真的不太了解您想做什么,所以我帮不了您什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM