也談memset函式的使用

2021-08-23 13:10:56 字數 899 閱讀 3131

memset

函式很多地方有介紹,多餘的就不說了。這裡給出msdn

上的一段解釋:

sets buffers to a specified character. void *memset( void *dest, int c, size_t count ); wchar_t *wmemset( wchar_t *dest, wchar_t c, size_t count ); parameters dest pointer to destination. c character to set. count number of characters.

有幾個要注意的地方,count

是字元的個數,建議把每個單位使用一次sizeof

×單位的總數來實現完全的memset。

比如:

int a[5][5]; memset(a, 0, 5*5*sizeof(int) ); 或者 memset(a, 0, sizeof(a) );

但是要注意的是:

memset對連續的空間使用,不連續的空間,或者不能確定是否連續的就不能使用,比如動態的二維陣列就會表現出不安全的一面:

int **p = (int **)malloc(n * sizeof(int *)); int i = 0; for(; i < n; i++)

如果:

memset(p, 0,n*n*sizeof(int) );

就會出問題,因為p是動態的二維陣列,空間連續否不能保證。

可以這樣:

for(i = 0; i < n; i++) memset(p[i], 0, n * sizeof(int) );

因為每乙個p[i]內部是連續的。

還有一些其他的要注意的,比如不能對含有虛指標包括vptr和vbptr的類物件使用memset等!

也談內聯函式

內聯函式使用的 三個關鍵字為 inline inline forceinline 在下面情況下編譯器不使用內聯編譯 1 函式或者呼叫者用選項 ob0 編譯的 debug builds 預設選項 2 函式或者呼叫者使用不同的異常處理型別 c 使用一種異常處理,結構化使用一種異常處理 3 函式有可變的引...

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