struct first_struct
{
int a;
int b;
};
struct second_struct
{
char d;
int e;
};
struct second_struct second_ins = {'a',10};
struct first_struct first_ins = {20,12};
int main()
{
struct second_struct *pointer = &first_ins;
printf("%d\n",pointer->d);
return 0;
}
我得到20的输出。基本上,我试图看到如果我声明一个结构指针,并尝试将其指向另一个结构的实例,我得到什么结果。除了来自编译器的不兼容指针类型的警告之外,它还可以构建并运行良好。 我试图了解编译器如何解释此操作。这不应该是未定义的,或者可能是它,我只是对结果感到幸运。
答案 0 :(得分:2)
两个结构都可能具有相同的元素对齐方式:sizeof(first_struct) == sizeof(second_struct)
和:int e
从结构中的相同偏移量开始:int b
换句话说,char d
在布局方面有效地存储为int
。这只是你平台上的一个幸运巧合,并且无法移植。