1. 關於該函式
函式原型:
memset(void *s,int ch,size_t n)
函式說明:
memset函式是計算機中c/c++語言函式。將s所指向的某一塊記憶體中的前n個
位元組的內容全部設定為ch指定的
ascii
值, 第乙個值為指定的記憶體位址,塊的大小由第三個
引數指定,這個函式通常為新申請的記憶體做初始化工 作, 其返回值為指向s的
指標。所在標頭檔案或。
2.對於該函式的深入**
該函式的第二個引數ch為進行初始化的值,該值如果的範圍為0到255(00000000到11111111)。如果超過該範 圍
那麼會對該值取後8位。如果ch為字元型,那麼取其ascii碼。
注:以下內容僅針對範圍內,超出範圍按最後8位擷取。
1.對bool陣列進行初始化:
初始化結果為true或false
(1)使用 0或1初始化
memset(prime,0,sizeof(prime)); 0為false,1為true
(2)使用 true或false初始化
memset(prime,true,sizeof(prime)); true為true,false為false
(3)使用其它值初始化
memset(prime,『a』,sizeof(prime)); 非0值為true,0為false(字元0取ascii碼48,為
true)
2.對char陣列進行初始化:
(1)使用char型變數。memset(ch,『a』,sizeof(ch)); 初始化結果為對應的字元。
(2)使用int型變數。
將該int值作為ascii碼,使用對應的字元進行初始化。
(0到127為ascii碼表,其中0為null,128到254未知,應該為擴充套件ascii碼。255顯示字串中字元無效。)
memset(ch,65,sizeof(ch));
memset(ch,0,sizeof(ch));
memset(ch,255,sizeof(ch));
(3)使用bool型變數true或false。(true為ascii碼1,false為ascii碼0,初始結果同int)
3.對int陣列進行初始化:
僅可在初始化的值的最後8位為11111111(255)或00000000(0)時能夠正確進行初始化。也就是說int型陣列 僅
能初始化為-1和0。其餘方法均不能得到正確的結果。
3.挖掘背後的原因
為什麼使用memset函式會出現這些情況呢?原因很簡單就是由於memset函式在做初始化的時候是以位元組 為單位的(1byte,也就是8位二進位制數)。由於bool型別和char型別均為1個位元組。所以在進行初始化的時候不 會發生任何問題(bool型別在存入陣列是會進行型別轉換,0為false,非0為true)。但是乙個int型變數是4個字 節,也就是32位二進位制數。那麼在初始化時會將4個用於初始化的字元組合成乙個int型的值。
例如:使用1進行初始化(memset(num,1,sizeof(num)))
(1) 1的二進位制數為 00000001
(2) memset函式初始化時每個位元組為
0000000100000001 00000001 00000001 000000010000000100000001 00000001 00000001 ..........
(3) 此時將前4個位元組組合成乙個int的數值,那麼該值為
(16843009)00000001
00000001 00000001 00000001
所以當且僅當初始化的值為0(00000000)或-1(......11111 11111111(此時僅會使用最後8位進行初始化))時,4個 位元組進行組合後與初始化的所用的值相同。
寫在最後:
第n次在使用這個函式上出現了問題。這一次做乙個詳細的記錄,防止以後忘了。。
Delphi中使用彙編 關於POS函式的問題
在delphi中使用彙編異常的簡單,只用使用關鍵字a end來引導就行了。得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式 另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。因為,雖然使用該函式寫的 是很簡...
Delphi中使用彙編 關於POS函式的問題
在delphi中使用彙編異常的簡單,只用使用關鍵字asm end來引導就行了。得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式 另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。因為,雖然使用該函式寫的 是...
Delphi中使用彙編 關於POS函式的問題
在delphi中使用彙編異常的簡單,只用使用關鍵字asm end來引導就行了。得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式 另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。因為,雖然使用該函式寫的 是...