memcpy函数和语句:数据类型1 d = *(数据类型2 *)&st的关系

memcpy函数区别于语句:数据类型1 d = *(数据类型2*)&st在于:在功能上,前者包含后者。具体说明如下:

charst[10];

__int64 d = *(__int64 *)&st;

等价于

memcpy(&d,st,sizeof(__int64));//sizeof(__int64=8

就是说将数组st中前8个字节的内容拷贝到d上,即将数组st中一个完整的__int64的大小的区域复制到d上。

memcpy函数的功能要比类似于__int64 d = *(__int64 *)&st;语句所能完成的功能更为灵活,即memcpy函数也可以完成如下功能:

memcpy(&d,st,3);

memcpy函数可以将数组st中一个任意字节大小的区域(这里是小于一个完整的__int64的大小)复制到d上,而语句:数据类型1 d = *(数据类型2*)&st只能将数组st中一个数据类型2所占的大小的区域复制到d上。

由于memcpy函数只复制3个字节的数据到d上,d上剩余5个字节还是原始数据,所以如果变量原先没有被初始化(为0,即memset(&d,0,sizeof(__int64)),则此时d显示的值会出错。

memcpy函数会复制指定长度的数据才会结束,在没有达到指定长度前即使字符数组st遇到了终止符'\0'也不会停止的。

注释:

如何能证明memcpy函数只复制3个字节的数据到d上,d上剩余5个字节还是原始数据不变呢?

若d是一个数组时,

在vs2010下,可以在程序处于调试时,先在未执行memcpy函数前看下变量d里的值,在执行memcpy函数后发现变量d里的前3个字节的值被修改了即变为红色字体(即使赋值为原值即值修改前后的值一样),未被动过的值依旧是黑色字体。

附加:

 

强制类型转换和隐式类型转换|自定义类型转换语句__int64 d = *(__int64 *)&st的说明


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值