使用memset初始化int型陣列的坑

2021-10-21 16:55:00 字數 1138 閱讀 6763

2021/3/23更新:

#include的 fill() 函式,可以方便快捷的初始化陣列元素為規約範圍內的任意值~
例子:將陣列元素全部初始化為233

int a[5]=;

fill(a,a+5,233);

標頭檔案:#include

或者直接上萬能標頭檔案:#include(才發現標頭檔案居然還可以開外掛程式,以後再也不怕不怕啦,牛掰啊 ~)

but,不要高興的太早哦,

上測試**:

#includeusing namespace std;

int main();

cout結果:

如果執行memset(e,1,sizeof(e));呢?(千萬不要做這樣的傻事!!!)

以身試錯就是我:

好了,測試部分結束,我們要分析一下,為什麼會出現這樣的情況,怎麼0、-1可以被初始化,1就不行了呢?

memset是依靠二進位制進行初始化,int是4個位元組,memset把每個位元組都賦值,也就是說,比如

因為計算機中用二進位制補碼表示數字,0和二進位制補碼為全0,-1的二進位制補碼為全1!

0,補碼是00000000 00000000 00000000 00000000結果是0

-1,補碼是11111111 11111111 11111111 11111111結果也是-1

所以對於0、-1可以被初始化,僅僅是個美麗的巧合~

但是 memset() 可以初始化乙個 bool陣列memset(b,true或false,sizeof(b));//b是個bool陣列

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...