0

在下面的代码中,我们可以复制yyxx? 如果没有,还有其他方法吗?我们是否必须使用指针或其他东西?

typedef unsigned int UINT32
typedef struct
{
    UINT32 a : 4; 
    UINT32 b: 2;      
    UINT32 c: 2;
    UINT32 d: 4;
    UINT32 e: 4;
    UINT32 f: 8; 
    UINT32 g: 8;
}Word;

Word *xx , *yy;
xx = yy;
xx->a = 1; 
4

4 回答 4

0

我会这样做:

#include <string.h>

Word A = { 4,2, 2,4,4,8,8};
Word B;
memcpy( &A, &B, sizeof(Word));

简单有效。

编辑: 更简单的是:

Word A = { 4,2, 2,4,4,8,8};
Word B = A;
于 2013-08-01T10:22:19.077 回答
0

当然,您可以将一种结构分配给彼此。每个成员都会被复制。

在您的示例中,*xx = *yy相当于:

xx->a = yy->a;
xx->b = yy->b;
//...
xx->g = yy->g;

请注意,您必须复制*yy进去*xx,而不是将指针复制yy到指针xx中。另请注意,您没有初始化指针,也没有初始化结构。你应该去像

Word a, b;
b.a = ...;
b.b = ...;
...
b.g = ...;
Word* xx = &a;
Word* yy = &b;
*xx = *yy; //equivalent to a = b;

您必须注意包含指针的结构:在这种情况下会复制指针的值,因此基础对象(如果有)是相同的。根据您的代码的语义,这可能是也可能不是您的意思。

于 2013-08-01T10:16:07.157 回答
0

您的代码复制指针,以便xxyy指向同一个对象。如果您要使用结构(而不​​是指针),= 运算符将与使用完全相同memcpy

这是复制后手表中的2个指针。注意相同的地址 这是复制后手表中的2个指针。 注意相同的地址

于 2013-08-01T10:24:21.550 回答
0

您可以尝试使用普通对象。数据不能在 c 中隐式地在结构内初始化。必须创建一个对象并且必须输入数据。

如果结构看起来像这样

typedef unsigned int UINT32;
struct Word{
  UINT32 a;
  UINT32 b;
  UINT32 c;
  UINT32 d;
 };

不使用指针:

Word xx , yy={0,1,2,3};
xx = yy;
xx.a = 10;
yy.b = 100; 
printf("%d -- %d -- %d -- %d",yy.a,yy.b,yy.c,yy.d); // 0 -- 100 -- 2 -- 3 
printf("%d -- %d -- %d -- %d",xx.a,xx.b,xx.c,xx.d); // 10 -- 1 -- 2 -- 3 

这里xxyy是为 Word 创建的不同对象。yy对象数据被复制到xx。更改xx的元素时不会影响yy数据,因为两者都是不同的对象。

使用指针时:

 struct Word *xx;
 struct Word *yy=malloc(sizeof(struct Word));
 yy->a=0;
 yy->b=1;
 yy->c=2;
 yy->d=3;
 xx=yy;
 xx->a = 10;
 yy->b = 100; 
 printf("%d -- %d -- %d -- %d",yy->a,yy->b,yy->c,yy->d); // 10 -- 100 -- 2 -- 3 
 printf("%d -- %d -- %d -- %d",xx->a,xx->b,xx->c,xx->d); // 10 -- 100 -- 2 -- 3 

在这里,您已经为xx分配了内存并为其初始化了数据。xxyy都指向同一个内存位置,因此更改xxyy中的数据都会影响两者。

于 2013-08-01T11:36:03.520 回答