我想将一个带有3个值的结构加载到只有2个值的结构中。
typedef struct {
double x;
double y;
} twod;
typedef struct {
double x;
double y;
double z;
} threed;
第二个结构包含三维平面的坐标数组。目标是只将x
和y
坐标加载到第二个结构的第一个结构中。
考虑到它们是不同的typedef,这可能吗?如何实施解决方案?
答案 0 :(得分:1)
不,当然,由于它不合适,所以它不可能直接实现。
但是你可以手动复制字段:
twod atwod;
threed athreed;
athreed.x = 1.0;
athreed.y = 2.0;
athreed.z = 3.0;
atwod.x = athreed.x;
atwod.y = athreed.y;
你可以做出可怕的假设并使用memcpy()
,但它不值得。
当然,您也可以使用所有基于继承的内容并重新构建threed
:
typedef struct {
twod xy;
double z;
} threed;
然后你可以这样做:
atwod = athree3.xy;
但对threed
的访问变得不那么明确了。
答案 1 :(得分:0)
您只需使用=运算符
即可threed a = {1.0, 2.0, 3.0};
twod b;
b.x = a.x;
b.y = a.y;
答案 2 :(得分:0)
持续不断的想法:
typedef struct {
double x;
double y;
} twod;
typedef struct {
union {
struct {
double x;
double y;
};
twod xy;
};
double z;
} threed;
示例程序:
int main() {
threed vec = {1, 2, 3};
vec.y = 5;
twod v2 = vec.xy;
printf("x:%g y:%g z:%g\n", v2.x, v2.y, vec.z);
}
答案 3 :(得分:-1)
我相信这应该有用......
threed from;
from.x = 10;
from.y = 20;
from.z = 30;
twod to;
memcpy(&to, &from, sizeof(double) * 2);