与数组相比,我对结构的内存组织有点困惑。可以通过数组中第一个元素的内存地址和所需索引的偏移量来访问数组元素。现在编译器如何评估结构成员的地址?
struct name
{
int a;
float b;
};
int main()
{
struct name *ptr,pt,p;
p.a=4;
p.b=4.5;
ptr=&pt;
ptr->a=5;
ptr->b=10.5;
return 0;
}
编译器如何知道将成员 a
的值存储在结构变量 p
中的什么位置,以及编译器如何计算成员 的偏移量和地址b
在第二种情况下,ptr
包含对结构变量pt
的引用。
编译器如何知道成员的内存地址。
最佳答案
在编译时,编译器知道 struct
的大小及其成员的偏移量。
对于您的 struct name
,编译器计算出以下信息。
结构名称
的大小- 成员(member)数据的布局
a
的偏移量为零,b
的偏移量为非零。
struct name
的布局可能类似于:
<--- Size of struct ----------------> +-----------------+-----------------+ | | | +-----------------+-----------------+ ^ | Address of ptr ^ ^ | | offset of a (0) offset of b (non-zero)
给定一个指针指向struct name
的地址,编译器确切地知道要偏移多少才能到达成员a
以及要偏移多少才能到达成员b
.
关于c++ - 编译器如何解析结构成员的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754892/