结构指针指向不同的结构实例

时间:2014-12-30 18:26:47

标签: c pointers struct

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的输出。基本上,我试图看到如果我声明一个结构指针,并尝试将其指向另一个结构的实例,我得到什么结果。除了来自编译器的不兼容指针类型的警告之外,它还可以构建并运行良好。 我试图了解编译器如何解释此操作。这不应该是未定义的,或者可能是它,我只是对结果感到幸运。

1 个答案:

答案 0 :(得分:2)

两个结构都可能具有相同的元素对齐方式:sizeof(first_struct) == sizeof(second_struct)和:int e从结构中的相同偏移量开始:int b

换句话说,char d在布局方面有效地存储为int。这只是你平台上的一个幸运巧合,并且无法移植。