C++结构体复制的相关问题
来源:互联网 发布:最新犀牛软件下载 编辑:程序博客网 时间:2024/04/30 17:15
C语言,C++,这操作内存的语言就是那么的纠结啊,呵呵。我们先定义两个结构体:
struct UMMessage{long mtype;char mtext[100];};struct MsgInfo{sem_t sem;int MQID;struct UMMessage MSG;};
假如已经有一个MsgInfo类型的结构体变量Info,现在需要新定义一个MsgInfo类型的结构体,并且等于Info,那么是否我们可以这样:
MsgInfo Info2=Info;
在C++里,这样当然是不行的,我们可以用memcpy函数进行复制,在这个例子中,使用memcpy是没有问题的,但当结构体中定义了std::string的变量时,就容易出错了,因为string在内存上存储是不连续的,不像char,int这些连续存储在内存块上(这个纠结啊)。所以安全起见,当需要复制结构时,自己再添加一个复制函数即可,比如:
void CopyMsgInfo(MsgInfo *dest,MsgInfo *src){dest->MQID=src->MQID;dest->sem=src->sem;CopyUMMessage(&(dest->MSG),&(src->MSG));}void CopyUMMessage(UMMessage *dest,UMMessage *src){memcpy(&(dest->mtext),&(src->mtext),sizeof(dest->mtext));dest->mtype=src->mtype;}
数组之间复制也是不能直接用“=”的,再次纠结一下。使用方法如下:
MsgInfo Info2;CopyMsgInfo(&Info2,&Info);
为此,我特意测试了一下C#(基本熟悉),代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { student stu = new student(); stu.x = 1; stu.y = "测试"; student stu2 = stu; MessageBox.Show(stu2.y); } } public struct student { public int x; public string y; }}
运行结果:
完全木有问题啊,这C#,这C++,强大的继续强大,傻瓜的继续傻瓜,呵呵。不过对于我们这些从高级语言往下走的人(js,C#,java),只有纠结,没有什么。
注意:结构体不能直接作形参,得用指针,其实也就类似不能直接用“=”。
作者:kunoy
出处:http://blog.csdn.net/kunoy
申明:作者写博是为了总结经验,和交流学习之用。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
- C++结构体复制的相关问题
- 关于C语言结构体的赋值(复制)问题
- C语言结构体中指针的复制问题
- VC中结构体的相关问题
- 怎样实现C结构体数据的整体复制
- C语言中结构体变量复制的例子
- C语言:结构体相关
- MySQL复制表结构问题的解决方法
- memcpy-结构体的复制
- memcpy-结构体的复制
- 关于结构体的复制
- 黑马程序员-C语言结构体使用的相关细节
- Linux C语言 时间相关的结构体
- c语言结构体的位域相关知识
- c指针的相关问题
- C 编译相关的问题
- 结构体与结构体指针的大小相关的问题
- C结构定义的问题
- WEB开发监控在线用户
- Swust 485 自守数 / Poj 2205 Self-Replicating Numbers
- 三维CAD软件项目即将验收 3D打印获突破
- wiki
- 深入php内核一(概述)
- C++结构体复制的相关问题
- 设计沟通的七条经验
- 深入php内核二(可扩展性)
- 博客推荐:推荐两个程序员相关个人博客s135.com coolshell.cn
- centos 5.8 yum 错误
- How to Configure DG4MSQL (Oracle Database Gateway for MS SQL Server) 64bit Unix OS
- 深入php内核三(源码布局)
- python 模块大全
- 深入php内核五(开始创建扩展)