C 中使用memset函式賦值的注意事項及推薦

2021-10-03 15:44:47 字數 1780 閱讀 8596

上午新建陣列後想使用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 作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法 ...