int dp[size];
memset(dp, 1, sizeof(dp));
for(int i=0;i<size;i++){
cout<<dp[i]<<" ";
}
输出的结果是
16843009 16843009 16843009 16843009 16843009 16843009
为什么呢?
因为memset是以字节为单位赋值的
什么意思呢
首先,一个int占四个字节,每个字节8位
memset(dp, 1, sizeof(dp));
这段代码的意思是用1来填充每个字节,填充完后每个dp[i]的结果如下
0000 0001 | 0000 0001 | 0000 0001 | 0000 0001 |
这实际上是2^24+2^16+2^8+2^0 = 16843009
写个代码算一下2^24+2^16+2^8+2^0真的是16843009吗
cout<<(int)(pow(2,24)+pow(2,16)+pow(2,8)+pow(2,0))<<endl;
结果还……真是
16843009
所以嘛
用memset(dp, 1, sizeof(dp));并不能将数组的每个元素初始化为int_max
但是memset(dp,0,sizeof(dp));能将数组的每个元素初始化为0