这里我们只讨论整数的情况,因为acm中经常要用到。
我先几个简单的,大家都能说出结果的:
#include<iostream>
using namespace std;
int a[10];
int main(){
memset(a,0,sizeof(a));//结果为0
memset(a,255,sizeof(a));//结果为-1
return 0;
}
我们需要知道其中的原理:
对于第一个例子:0对应的二进制为00000000(每次八位),由于都一样只需去填一个字节,由于整形是四个字节,填充后的结果为00000000000000000000000000000000(共32个0)。
对于第二个例子,对应的结果为1111111111111111111111111111111(32个1)即为-1。若数组类型改为unsigned int则输出结果为2的32次方减1(4294967295)。
我们来看更复杂一些的例子:memset(a,10,sizeof(a));根据上述分析结果值应该为0000101000001010000001010000001010。但是对于二进制大于16位的将做何处理呢?memset(a,771,sizeof(a)),结果为多少呢?由于771的二进制为1100000011,每次从后面填二进制位,只填8位,后面的会覆盖,所以说,只有后八位起作用!故结果为00000011000000110000001100000011。