简单的问题:结构的赋值大家通常怎么做?

realfishhook 2005-10-06 11:19:19
typedef struct
{
int a;
long b;
char c;
double d;
....
}A;

A a,b;
....//a已经赋值了
--------------------------
接下来,如果把a的值赋给b,大家都怎么做?

a) b.xx=a.xx
还是
b) 直接memcopy
???
--------------------------
用b的方式,不会出现问题吧???谢了先!
------------------------------------------------------------------




...全文
288 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuming2003 2005-10-09
  • 打赏
  • 举报
回复
在c中就直接使用a=b,相对于memcpy效率更高(由编译器直接生成代码),而效果一样
在c++中不要使用memcpy,如果需要重载=
格兰特杨 2005-10-09
  • 打赏
  • 举报
回复
Ha, 必须补充...。

A b = a; //是复制构造

如果用
A b;
b = a; //是赋值操作

然而在没有明确定义A的复制构造时,两者的结果应该是一样的。
格兰特杨 2005-10-09
  • 打赏
  • 举报
回复
C++: 把struct看成类,所以用=操作符可以调用缺省复制构造,也即位copy。
C: 你最好用memcpy,视你用什么编译器而定。gcc好象也可以用=,不确定

你这个类是没有问题,如果在C++里面,直接用=号即可。memcpy当然也可以。
mefit 2005-10-09
  • 打赏
  • 举报
回复
b=a
snowbirdfly 2005-10-09
  • 打赏
  • 举报
回复
应该用memcpy好一些~~
更容易一点~~~
haozhangr 2005-10-09
  • 打赏
  • 举报
回复
直接赋值好了

wzjall 2005-10-06
  • 打赏
  • 举报
回复
可以重载=,
也可以对成员一个一个的赋值.
看具体情况而定
zhouhuahai 2005-10-06
  • 打赏
  • 举报
回复
memcpy是要对指针进行的.
xiaocai0001 2005-10-06
  • 打赏
  • 举报
回复
要么一个一个的赋值

要么memcopy()

在C++中还可以重载=
heskyII 2005-10-06
  • 打赏
  • 举报
回复
同意 liem(阿明) ( ) 信誉:105
我遇到过这个问题,可以直接用b=a;进行赋值,但如果包含类的对象成员和指针就不肯定了。
如果含有指针,也不能用memcpy,因为会是b与a中的指针指向同一内存区,进行操作的时候,如果a改变了指针的指向,则b的指向也会发生改变。
liem 2005-10-06
  • 打赏
  • 举报
回复
也可以直接赋值吧
b=a;
yjy1001 2005-10-06
  • 打赏
  • 举报
回复
A a,b;

memcpy(&b, &a, sizeof(A));//结构赋值的常用方法
xiao999huan 2005-10-06
  • 打赏
  • 举报
回复
1)void *memcpy(void *destin,void *source,unsigned n)
memcpy从source复制一个n字节的块到destin.如果源块和目标块重迭,则选择复制方向,
以例正确地复制覆盖的字节. memcpy返回destin

2)void *memccpy(void *destin,void *source,unsigned char ch,unsigned n)
memccpy从source复制字节到destin.复制一结束就发生下列任一情况:
(1)字符ch首选复制到destin.
(2)n个字节已复制到destin.
memccpy若复制了ch,则返回直接跟随ch的在destin中的字节的一个指针;
否则返回NULL

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧