C / C ++结构如何实际工作?

时间:2013-11-10 04:27:28

标签: c++ c struct

我知道结构是什么,以及如何制作一个结构以及为什么你应该输入一个...

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

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

2 个答案:

答案 0 :(得分:5)

关于typedef-stru的部分is debatable

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

编译器知道哪些偏移指向哪个元素,并在需要访问元素时将它们加入到程序中。因为结构体结构在运行时不能改变,所以不需要使用查找表。

例如,我可以编写如下结构:

 char Foo[12];

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

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

答案 1 :(得分:1)

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