This question already has answers here:
Casting one C structure into another

(9 个回答)


7年前关闭。




编译以下代码时:
struct Point {
    int x;
    int y;
};
struct Position {
    int x;
    int y;
};
struct Point p = {1, 2};
struct Position q = (struct Position)p;

发生错误:



当这些 struct 实际上具有相同的定义时,难道没有某种方法可以在不同的 struct 实例之间进行转换吗?

最佳答案

C 语言中的结构类型没有“强制转换”这样的东西。 C 语言仅支持标量类型和 void 的强制转换。

当在 () 中使用任何其他类型时,它不再是强制转换。它只能作为复合文字语法的一部分有效。复合字面量是 C 语言的一个完全不同的特性,与任何类型转换无关。例如,这将是正确的

struct Position q = (struct Position) { 1, 2 };

在您的情况下,您显然需要重新解释序列
q = *(struct Position *) &p;

C 语言声明这种访问被认为是有效的,只要您的结构声明确实是同步的。您还可以考虑简单地将 memcpy -ing 一个对象连接到另一个对象。

关于在两个等效的 C 结构之间进行转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20166832/

10-11 02:17
查看更多