【发布时间】:2014-10-06 22:03:54
【问题描述】:
我有一个看起来像这样的复杂结构。
struct a
{
struct b
{
int b_inner_int;
char b_inner_char;
}x;
struct c
{
int c_inner_int;
char c_inner_char;
}y;
}z;
我使用了一个函数,它将“struct c”的地址作为参数。现在我希望这个函数将“struct c”的值复制到“struct b”。我在 main 函数中进行的函数调用可能如下所示。
copy_val(&z.y);
现在,我该如何定义 copy_val?有什么建议? 如果我定义了一个 struct c 类型的指针,如下所示它不起作用。
void copy_val(struct c *addr)
{
struct c *tmp=addr;
int tmp_int=tmp->c_inner_int;
int tmp_char=tmp->c_inner_char;
tmp=tmp-1; /** assuming that b and c are of same type and decrementing pointer by 1 takes to beginning of b **/
tmp->b_inner_int=tmp_int;
tmp->b_inner_char=tmp_char;
}
【问题讨论】:
-
尝试一些东西,分享它,并展示你尝试过的东西,然后如果你有问题,我们可以讨论它。所以不是让我们编写您的代码的地方。我会说一个从一个复制到另一个的函数将需要传递给它的两个内部结构地址,如果你坚持传递内部结构..
-
你不是说要从
c结构复制到b结构吗? -
是的,这是一个错字...我的意思是从 c 复制到 b...@JoachimPileborg
-
如果结构 b 和结构 c 相同,则只需定义一个结构并将其用于两个不同的变量。那么只需将一个变量分配给另一个变量即可。
-
我也不会指望 tmp 指针的递减来让你进入 struct b 。不知道编译器可能对 struct a layout 做了什么。