memset | 用法 | 注意 | 单字节 |
一、用法
memset函数可以将一个数组重置为某个值
第一个参数是void*,可以写需要重置的数组的数组名
第二个参数是一个值,这个值就是用来重置数组的
第三个参数表示需要重置数组中多少个元素(从第一个元素开始)
比如
char str[16];
memset(str,'a',sizeof(str));
可以使每个str里的元素值都为’a’
二、注意
- 有一点需要注意的是,memeset是以字节为单位重置数组元素的,这是什么意思呢?
意思是它重置(reset)字符数组是不会有问题的,但是重置整型数组会有些和预想不同的效果,比如:
int D[16];
memset(D, 3, sizeof(D));
这时候我们的D数组并没有被重置为3,而是被重置成了50529027,因为memset不会检查你的数组类型,它只会以字节为单位去重置,这里它把3看成了单字节(而不是int的4字节或者2字节),所以D中的每个元素(假设4字节)被4个单字节拼接而成,3=0000 0011,所以重置后为0000 0011 0000 0011 0000 0011 0000 0011
这个值正好为50529027
- 如果第二个参数超出了单字节的范围,也没问题,它会溢出到负数那一端,比如:
int D[16];
memset(D, 129, sizeof(D));
这里129溢出,实际的二进制形式为:1000 0001,
拼接成4字节后,为1000 0001 1000 0001 1000 0001 1000 0001,这个值是-2122219135
- 最后一点是,用这个把int数组重置为-1或者0是没问题的,因为-1的二进制是11…111,不管是单字节还是四字节都是这种形式。
所以下面的代码把D数组的所有元素重置为-1。
int D[16];
memset(D, -1, sizeof(D));