(1)memcpy函数的使用与模拟实现

特点:1、因为接受参数是void*类型,所以可以接受任意类型的数据;但是,在引用时必须强制类 型转换
2、memcpy处理的是两块不重叠的内存数据的拷贝
memmove可以同时处理重叠与不重叠两块内存的拷贝
3、对于memcpy函数,能否处理重叠部分内存数据取决于编译器本身(vs2022可以)
4、内存重叠的定义:是指两个或者多个内存区域有部分或者全部地址空间是相同的情况
5、memcpy的模拟实现

**防止出现内存重叠,创建两个数组,开辟两块空间区域
(2)memmove函数的使用与模拟实现
1、![]()
destination:目标空间
source:源头空间
size_t num:字节数
同样可以接受任何类型的数据,使用需要强制类型转换
2、memmove的模拟实现
两种情况:1、dest<src 由前往后
2、dest>src 由后往前

(3)memset函数的使用
![]()
1、ptr→destination value→source
2、疑问:为什么我们传的是char类型字符,却使用int类型接收?

解答:因为char类型也是整型家族的,可以直接用int接受的;并且字符是以ascii码存储的ascii码就是整型数字;在传输的时候发生了转化;char的范围比较小int范围比较大,类型又一样,转换一点问题没有的
(4)memcmp函数的使用

1、整型转化成字节倒着存(大端存储)
2、内存比较,内存里的数据比较
(5)整数在内存中的存储
1、 整数在在内存中的储存,三种:原码、反码、补码
正整数原反补码都相同
负整数原反补码都不相同(详情见操作符章节)

(6)大小端字节序和字节序判断
以0x11223344举例
11端为高位字节 44端为低位字节
———————————————
低地址 高地址

自己整理的口诀:大相反,小相同

数据的读取:大多数情况下,读取数据是从低地址开始向高地址读取;对一些复杂情况,例如: 结构体类型,可能并不是这样
数据的存储:首先要区分字节序;大端:从低地址开始按照字节序的高位到低位存储
小端:从低地址开始按照字节序的低位到高位存储
总结:读取和存储都是从低地址开始;但是存储时要区分字节序
(7)浮点数在内存中的储存
1、 浮点数家族:float、double、long double
通过浮点数和整数打印的解读结果差别很大,原因如下

举例:5.0的二进制形式101.0==1.01*2^2
S=0;M=1.01;E=2

2、在储存中有一些特殊规定


1273

被折叠的 条评论
为什么被折叠?



