memset 只有在初始化 1,0時才會正確。

2021-10-06 02:19:14 字數 812 閱讀 5184

#include #include int main() 

return 0;

}

程式功能:初始化陣列元素為輸入值。

輸入:-1

預期輸出:

-1 -1

0 01 1

實際輸出:

-1 -1

0 016843009 16843009

原因:memset是按位元組賦值的,取變數a的後8位二進位制進行賦值。

1的二進位制是(00000000 00000000 00000000 00000001),取後8位(00000001),int型佔4個位元組,當初始化為1時,它把乙個int的每個位元組都設定為1,也就是0x01010101,二進位制是00000001 00000001 00000001 00000001,十進位制就是16843009。

之所以輸入0,-1時正確,純屬巧合。

0,二進位制是(00000000 00000000 00000000 00000000),取後8位(00000000),初始化後00000000 00000000 00000000 00000000結果是0

-1,負數在計算機中以補碼儲存,二進位制是(11111111 11111111 11111111 11111111),取後8位(11111111),則是11111111 11111111 11111111 11111111結果也是-1

總結:memset()只有在初始化-1,0時才會正確。想要初始化為其他值,我目前會做的就是diy了。。。

int a[11];

for(int i=0;ia[i]=1;

memset初始化陣列

memset初始化陣列 結構體也可初始化 不過我在此處並未對結構體初始化.memst按位元組進行初始化,可以選擇將陣列初始化為0或初始化為 1 include include include include include using namespace std int main include i...

memset函式初始化

對於絕大多數編譯器來講,char namekey 15 與memset namekey,0x0,sizeof namekey 或memset namekey,0 sizeof namekey 這三個是一樣的。但是有的編譯器,char namekey 15 只將namekey 0 給賦值為 0 其他成...

memset函式初始化

標頭檔案 incldue 靜態陣列 int num 10 memset num,0,sizeof num 初始化為 0 memset num,1 sizeof num 初始化為 1 memset num,0x3f sizeof num 初始化為無窮大 memset num,0x3f sizeof n...