在以下代码中,我们可以将yy
复制到xx
吗?如果没有,还有另一种方式吗?我们必须使用指针或其他东西吗?
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;
答案 0 :(得分: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;
你必须注意包含指针的struct:在这种情况下复制指针的值,因此底层对象(如果有的话)是相同的。根据您的代码的semanthics,这可能是也可能不是您的意思。
答案 1 :(得分: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;
答案 2 :(得分:0)
您的代码复制指针,以便xx
和yy
指向同一个对象。
如果您使用结构(而不是指针),则=运算符与使用memcpy
这是复制后手表中的2个指针。注意相同的地址
答案 3 :(得分: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
此处 xx 和 yy 是为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 分配内存并为其初始化数据。 xx 和 yy 都指向相同的内存位置,因此更改 xx 或 yy 中的数据都会影响两者。