memset填充方式是以1字節爲單位對內存進行填充,對於數組進行初始化
int a[2];
memset(a,0,sizeof(a));
for(int i=0; i<2; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
memset(a,-1,sizeof(a));
for(int i=0; i<2; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
memset(a,1,sizeof(a));
for(int i=0; i<2; i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
猜猜運行結果?
可以看到memset成功對數組進行了0與-1的初始話,可是爲什麼1卻不行呢,這就要用到上面提到的memset的工作方式了,首先,int類型的整數在計算機中的存儲方式爲補碼,4字節。
未初始化默認保存爲
00000000 00000000 00000000 00000000
按0初始化,以爲原本默認值就是0,所以還是原來的情況
按1初始化
00000001 00000001 00000001 00000001
將每一個字節均賦值爲1,由於正數補碼與原碼相同,所以得到了如圖所示的結果
按-1初始化,將每一個字節初始化爲-1
11111111 11111111 11111111 11111111
可以發現經過補碼到源碼的變換後,原碼爲
10000000 00000000 00000000 00000001
這恰恰是-1的原碼,所以對於0和-1的初始化成功純屬巧合,而對於其他數像1等就無法做到