用memset进行赋值操作
int a[3];
char b[3];
memset(a,0,sizeof(a));
0 0 0
memset(a,1,sizeof(a));
16843009 16843009 16843009
memset(a,-1,sizeof(a));
-1 -1 -1
memset(b,'a',sizeof(b));
a a a
参考表
sizeof(char)=1;
sizeof(int)=4;
sizeof(float)=4;
sizeof(long)=4;
sizeof(long long)=8;
sizeof(double)=8;
memset是按照字节进行赋值的
它是对要进行赋值的变量的后八位二进制进行赋值
因为2^8等于256,已经完全适用于字符的ASCII了
但是呢,对于整数来说
1的二进制是00000000 00000000 00000000 00000001
去后面的8位00000001
而int型占4个字节,当初话的时候是进行每个字节变成00000001
就会变成0x01010101
00000001 00000001 00000001 00000001
十进制是16843009
二进制是00000000 00000000 00000000 00000000,
取后8位00000000,初始化后00000000 00000000 00000000 00000000
结果是0
负数在计算机中以补码存储,二进制是11111111 11111111 11111111 11111111,
取后8位11111111,则是11111111 11111111 11111111 11111111
结果也是-1
比如a
a的ASCII码是97
二进制形式01100001,取后八位还是01100001
而且char是一个字节的,那么进行初始化还是01100001
为a
对于memset可以对0和-1进行初始化纯属是巧合问题,memset的头文件是cstring,所以该函数其实是属于对字符进行初始化用的
原文:https://www.cnblogs.com/Emcikem/p/11354179.html