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),不能赋各字节不同的值。