上午新建陣列後想使用memset函式(string中的,需要#include)對陣列初始化。但是一直賦值失敗,仔細研究後發現,memset是按位初始化的。
先寫出memset的定義
memset(void *buffer, int value, int size);
其中*buffer是陣列頭指標、value是要給陣列初始化的值、size是初始化範圍,其中前兩個引數比較好理解,我在使用時問題也是出在第三個引數上。memset中第三個引數並不是陣列下標而是初始化的字元位數,比如初始化乙個int型的變數時,由於乙個int佔四位,所以size應該等於4,若初始化的值為1,那麼最終的結果是這個int型變數由1111組成(即1×16×16×16+1×16×16+1×16+1=4369)
下面舉例說明一下:
//使用賦值的方法初始化乙個新陣列
int arrr[5]
=;//使用memset的方法對陣列進行賦值
memset
(arrr,0,
17);//輸出陣列元素值進行檢視
for(
int i =
0; i <
5; i++
) cout <<
"i: "
<< i <<
" arrr["
<< i <<
"]: "
<< arrr[i]
<< endl;
執行結果為:
可以看出arrr並未被賦1,其值16843009化為二進位制為:
00000001,00000001,00000001,00000001
可知memset在賦值時是按位進行賦值的,並不是按陣列元素近賦值。若是想對陣列元素進行賦值可以使用algorithm中的fill函式(需要#include),先展示一下效果,再詳細介紹fill函式。
...
int arrr[5]
=;cout <<
"memset賦值"
<< endl;
memset
(arrr,1,
17);for
(int i =
0; i <
5; i++
) cout <<
"i : "
<< i <<
" arrr["
<< i <<
"] : "
<< arrr[i]
<< endl;
cout <<
"fill賦值"
<< endl;
fill
(arrr, arrr +2,
1);for
(int i =
0; i <
5; i++
) cout <<
"i : "
<< i <<
" arrr["
<< i <<
"] : "
<< arrr[i]
<< endl;
執行結果為:
fill函式是標頭檔案algorithm中的乙個賦值函式,其引數為:
fill(first, last, value),其中first:賦值起址、last:賦值終址、value:賦何值。
C 中使用memset函式
大神總結部落格 參考部落格 以下內容是在大神部落格中總結出來的 函式原型 void memset void s int ch size t n memset 結構體 陣列名 用於替換的ascii碼對應字元 前n個字元 memset 結構體 陣列名 用於替換的字元 前n個字元 函式解釋 將s中的前n個...
memset 函式的使用
語言 c c 標頭檔案 或 函式原型 void memset void ptr,int value,size t num 注 ptr 指向要填充的記憶體塊的指標。value 要設定的值。該值作為int傳遞,但該函式使用該值的unsigned char轉換填充記憶體塊。num 要設定為值的位元組數。解...
memset函式的使用
void memset void s,int ch,size t n 函式解釋 將s中當前位置後面的 n個位元組 typedef unsigned int size t 用 ch 替換並返回s。memset 作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法 ...