内存函数

内存函数以及数据在内存中的存储

void*指针可以接收任意类型的地址

void*的指针(无具体类型的指针)不能进行直接运算,一般强制类型转换之后进行运算

强制类型转换只是临时的 比如:(char * *)dest++是不会按照char所占字节个数来+1的(这时候甚至会报错) 就算++放在前面,在有些编译器上也不行 但可以写为dest=(char ** )dest+1

C语言规定memcpy只要可以实现不重叠的拷贝就行了,但是VS上的memcpy可以实现重叠的拷贝,其他编译器不一定可以(memmove可以完全替代memcpy,自己用memmove)

把一个不受限制的地址交给一个受限制的地址时,编译器不会报警告

把一个受限制的地址交给一个不受限制的地址时,编译器会报警告

Screenshot_20241201_163938_tv_danmaku_bilibilihd_CheeseDetailActivityV3_edit_355135163614851

memset只能一个字节一个字节的改,所以发生了错误

Screenshot_20241201_164603_tv_danmaku_bilibilihd_CheeseDetailActivityV3_edit_355174716927469

右边的实体那个是地址中储存的补码的16进制

cahr类型数据的理解方法(取值范围是-128~127)(其他的可以类比)

Screenshot_20241202_133703_tv_danmaku_bilibilihd_CheeseDetailActivityV3_edit_368041231702697

%u直接打印补码 %d会认为首位的是符号位

打印时给有符号数不够的位补11111 给无符号数不够的位补0000(这个1和0是添加在符号位后面)(这个和%u还是%d无关)

关于多久用原码和补码:

1.打印方式和数值范围都没超出规定时,用平常运算就可以知道了,不需要用原码和补码啥的去理解

%x是以16进制的形式打印 ,但是打印时不会把0x打印出来(%#x的话,前面会有0x)

IMG_20241204_173217

浮点数的存储,存储的就是S、M、E相关的值

浮点数在内存中是无法精确保存的(比如:8.8f 那个0.8就保存不精确,凑不齐)

浮点数在比较相等时,
有些是不能eg:
float f = 8.8;
if(f == 8.8)
.......  的
而是采用f-8.8的绝对值小于一个自己可以接受的精确度即可

Screenshot_20241204_165618_tv_danmaku_bili_UnitedBizDetailsActivity_edit_394631216803358

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值