一:memcpy函数的定义:
memcpy函数功能的解释:
二:memcpy函数的演示:
1, 函数memcpy从arr1的位置开始向后复制20个字节的数据到arr2的内存位置。
2, 函数memcpy从arr1的位置开始向后复制21个字节的数据到arr2的内存位置。
只多了复制了一个字节,却得到了6这个整形,这是因为在vs中内存是小端存储:
//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00
标红的06这个字节刚好是第21个字节,而它保留了6这个整形的关键部分,和arr2中的0组合起来,刚好也是06 00 00 00 。
三:memcpy的模拟实现:
a, 函数memcpy从arr1的位置开始向后复制20个字节的数据到arr2的内存位置。
理解要点:
1,因为返回的是dest指向的首地址,而dest指向的地址在复制的过程之中会被改变。所以一开始void* start = dest; void*是因为不知道dest的类型。
3,while (num--);的理解在于进行逐字节的复制,而num就是我们要复制的字节数,刚好作为循环条件。
2,void* 类型的指针,不能进行指针运算和指针解引用,所以我们要将其进行强转之后再进行运算和解引用,那我们选择的强转的类型就是char*,逐字节的复制,会适用与多种类型指针的复制。所以再进行dest和src的复制,和dest和src向后移动的时候,都要先进行强转。
b, 函数memcpy从arr1的位置开始向后复制21个字节的数据到arr2的内存位置。
和memcpy结果一致。