让我们先看两个代码
memset(dp, 0x3f, sizeof(dp));
for (int i = 0; i < 5; i++)cout << dp[i] << " ";
memset(dp, 127, sizeof(dp));
for (int i = 0; i < 5; i++)cout << dp[i] << " ";
代码结果如下:
现在我们来分析一下原因:
因为memset是以字节为单位赋值的
什么意思呢
首先,一个int占四个字节,每个字节8位
memset(dp, 1, sizeof(dp));
这段代码的意思是用1来填充每个字节,填充完后每个dp[i]的结果如下
0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 1 |
这实际上是2^24+2^16+2^8+2^0 = 16843009
同理127的二进制为
1 1 1 1 1 1 1 1 |
因此用memset初始化为
1 1 1 1 1 1 1 1 | 1 1 1 1 1 1 1 1 | 1 1 1 1 1 1 1 1 | 1 1 1 1 1 1 1 1 |
注意memset的两个特殊初始化,一个初始化为0,还有个为-1;
memset(dp, 0, sizeof(dp));
memset(dp, -1, sizeof(dp));