关于memset使用的一些总结
void memset(void *str, int ch, size_t n
将str中当前位置后面的n个字节用ch替换并返回s,也就是说这个函数的作用是将数字以单个字节逐个拷贝的方式放到指定的内存中
memset(a, 127, sizeof(a))
127的二进制表示是01111111,在数组里存放的就是四个01111111,十进制数里是2139062143(小于int类型的范围)
memset(a, 127, sizeof(a))
128二进制是10000000,四个10000000就是-2139062144,就是初始化为一个很小的数
----------
memset是按字节赋值的,因此char类型的数组可以赋任意值。
因此memset的正规用法是用来初始化char类型的数组的,也就是说它只会接受0x00-0xFF的值。
因为0的二进制是32个0,-1的二进制是三十二个1,所以使用memset可以直接初始化0和-1。
如果要初始最大化,第一位是符号位为0,剩下为1,01111111化十六进制正好为0x7f,所以memset(arr, 0x7f, sizeof())就是初始最大化了。
但是这个数不能满足“无穷大加无穷大依然是无穷大”的性质,相加后它是一个很小的负数。
所以一般无穷大常量取值是0x3f3f3f3f。
0x3f3f3f3f十进制是1061109567,是10^9级别。
0x3f3f3f3f + 0x3f3f3f3f = 2122219134,没有超过32位int的范围,所以相加也满足“无穷大加无穷大以旧是无穷大”的性质
0x3f3f3f3f的每个字节都是0x3f,要把一段内存全部置为无穷大,只需要memset(arr, 0x3f, sizeof(arr))
其他memset赋值:
memset(arr,0x80,sizeof(arr)); //set int to -2139062144
memset(arr,0x7F,sizeof(arr)); //set double to 1.38242e+306
memset(arr,0xFE,sizeof(arr)); //set double to -5.31401e+303
知识点参考:百度百科以及以下链接博主:https://blog.csdn.net/lyj2014211626/article/details/65481630
学到了
好好好,清晰明了,速速收藏
感谢佬,写得简洁易懂