This question already has answers here:
Casting one C structure into another
(9 个回答)
7年前关闭。
编译以下代码时:
发生错误:
当这些
在您的情况下,您显然需要重新解释序列
C 语言声明这种访问被认为是有效的,只要您的结构声明确实是同步的。您还可以考虑简单地将
(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/