struct AAA
{
char a_1;
int a_2;
};
struct BBB
{
char b_1;
int b_2;
};
int main(void)
{
struct AAA a1 = {2, 4};
struct BBB b1;
b1 = (struct BBB)a1;
return 0;
}
如上所示,“b1 =(struct BBB)a1;”使complie说“错误:转换为请求的非标量类型”。 struct AAA和struct BBB具有相同类型的成员,为什么强制转换失败?
谢谢
答案 0 :(得分:6)
您无法在C中投放struct
,如果您确实需要将memcpy
复制到a1
,请使用b1
。
memcpy(&b1, &a1, sizeof(a1));
答案 1 :(得分:5)
在C标准中(查看N1256,因为它是免费提供的)
6.5.4定义了Cast运算符。
6.5.4.2列出了对施法者的限制:
除非类型名称指定void类型,否则类型名称应为 指定限定或不合格的标量类型和操作数 有标量类型。
6.2.5.21将标量和聚合类型描述为:
算术类型和指针类型统称为标量类型。数组和 结构类型统称为聚合类型.37)
结构类型因此绝对不是标量类型,这意味着不满足对转换运算符的约束。因此,代码失败。