为什么 memset() 只能将 int 数组初始化为 0 或 -1

  C/C++ 标准库提供了很多常用的工具函数,比如在 <string.h> 中的 memset() 函数就常常被用来初始化数组,但它在初始化 int 等类型数组的时候只能初始化为 0 或 -1,如果识图用 memset() 将数组初始化为 1,就会发现每个元素都变成了 16843009。
  造成这种情况的原因很简单,因为 memset() 的作用是将内存块填充为指定的字符,这也是为什么它包含在 string.h 里的原因。因此,memset() 对内存进行赋值是以字节为单位的。
  比如我们调用 memset()int 数组初始化为 1,那么数组的每个字节(不是元素)都会被设置为 00000001,而 int 占 4 个字节,故每个元素的值就是 00000001 00000001 00000001 00000001,该二进制值就是十进制的 16843009,所以 memset() 函数不能把整型数组初始化为 1。
  对于长度大于 1 个字节的变量,只能通过 memset() 设置为各字节相同的值,比如 0(全零)或 -1(全1),不能赋各字节不同的值。