【问题标题】:C: casting to new structure vs casting to defined structureC:转换为新结构与转换为定义的结构
【发布时间】:2017-04-02 18:26:11
【问题描述】:

我的问题很简单,是这样吗

typedef struct {a;b;c;d;}bar;
((bar*)ANOTHERSTRUCTPOINTER)->a=1;
((bar*)ANOTHERSTRUCTPOINTER2)->a=1;
//<...>
((bar*)ANOTHERSTRUCTPOINTERn)->a=1;

执行时间和这个一样吗?

((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER)->a=1;
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTER2)->a=1;
//<...>
((struct {a;b;c;d;}*)ANOTHERSTRUCTPOINTERn)->a=1;

请注意,这只是一个例子,所以不要质疑我没有使用数组的事实

【问题讨论】:

    标签: pointers data-structures struct casting typedef


    【解决方案1】:

    是的,它们的含义相同,应该编译成相同的可执行代码。

    【讨论】:

    • 我所知道的是他们做同样的事情,但我仍然有疑问,因为在第一个中,结构只定义一次,而在第二个中,它在每次演员表中定义(或者在我看来,这就是我要问的原因)
    • 您是正确的,每次都重新定义结构,但这发生在编译时,而不是运行时。在运行时,结构的“字段”只是硬编码(由编译器)从其起始地址偏移。
    • 我想我应该补充一点,这个答案在技术上是特定于平台的,并且不受 C 标准的保证——原则上,您可能正在使用在运行时解析源代码的 C 解释器,在这种情况下重复的结构定义可能需要额外的工作。但在实践中,每个人都将C编译成机器码,编译器将结构体字段解析为固定的偏移量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2017-02-09
    • 2014-01-16
    相关资源
    最近更新 更多