一般喜欢用memset来初始化一个内存块。所以在使用的时候可能操作如下
这是正确的
但是如果
得到的结果不是f[0] = 1,而是f[0] = 16843009,注意因为memset的第一个参数是void* 所以是在8位上操作。f[0]实际填充表示为2进制为00000001000000010000000100000001也就是16843009。
因为char是会裁剪的,256的2进制为1 00000000 00000000,所以效果和memset(f,0,sizeof(0));一样的
(发句牢骚,为什么是在8bit上操作。第二个参数不使用char而使用int.....真是不明白这个api定义的时候为什么!)
所以memset填充一般用于char*。具体见下面的文章
memset用法详解
int
buffer[
256
];
memset(buffer, 0 , sizeof (buffer));
memset(buffer, 0 , sizeof (buffer));
但是如果
int
f[
256
];
memset(f, 1 , sizeof (f ));
memset(f, 1 , sizeof (f ));
int
f[
256
];
memset(f, 256 , sizeof (f));
memset(f, 256 , sizeof (f));
(发句牢骚,为什么是在8bit上操作。第二个参数不使用char而使用int.....真是不明白这个api定义的时候为什么!)
所以memset填充一般用于char*。具体见下面的文章
memset用法详解