0

我知道什么是结构,以及如何制作结构以及为什么要键入定义...

typedef struct Foo {
    int a;
    char b;
    float c;
} Foo;

但我不知道它是如何工作的。当您引用一个元素时,模板是否保存在堆栈中并像查找表一样使用(类似于类的工作方式)?或者这里有其他设计在起作用。

4

2 回答 2

5

关于 typedef 结构的部分是有争议的

结构基本上是一种将一堆数据存储在一起的便捷方式。

编译器知道哪些偏移指向哪个元素,并在需要访问元素时将它们烘焙到程序中。由于 struct 结构在运行时无法更改,因此无需使用查找表。

例如,我可以像下面这样编写上面的结构:

 char Foo[12];

 *((int *)  (Foo + 0)) = a;
 *((char *) (Foo + 4)) = b;
 *((float *)(Foo + 8)) = c;

您可以看到偏移量是手动烘焙的。不需要查找表。当您使用结构时,编译器会自动执行几乎相同的操作。

于 2013-11-10T04:35:35.537 回答
1

Astruct只是一个定义。它定义了数据的排列,但除非您声明该类型的变量,否则它不会保存在程序本身中。变量可以存储在堆栈、堆中,如果它足够小,甚至可以存储在寄存器中……根据用于其他变量的相同规则。

于 2013-11-10T04:38:03.203 回答