memset,記憶體初始化函式

2022-03-22 22:20:54 字數 1113 閱讀 6031

# include void *memset(void *s, int c, unsigned long n);

函式的功能是:將指標變數 s 所指向的前 n 位元組的記憶體單元用乙個「整數」 c 替換,注意 c 是 int 型。s 是 void* 型的指標變數,所以它可以為任何型別的資料進行初始化。

memset() 的作用是在一段記憶體塊中填充某個給定的值。因為它只能填充乙個值,所以該函式的初始化為原始初始化,無法將變數初始化為程式中需要的資料。用memset初始化完後,後面程式中再向該記憶體空間中存放需要的資料。

memset 一般使用「0」初始化記憶體單元,而且通常是給陣列或結構體進行初始化。一般的變數如 char、int、float、double 等型別的變數直接初始化即可,沒有必要用 memset。如果用 memset 的話反而顯得麻煩。

當然,陣列也可以直接進行初始化,但 memset 是對較大的陣列或結構體進行清零初始化的最快方法,因為它是直接對記憶體進行操作的。

這時有人會問:「字串陣列不是最好用'\0'進行初始化嗎?那麼可以用 memset 給字串陣列進行初始化嗎?也就是說引數 c 可以賦值為'\0'嗎?」

可以的。雖然引數 c 要求是乙個整數,但是整型和字元型是互通的。但是賦值為 '\0' 和 0 是等價的,因為字元 '\0' 在記憶體中就是 0。所以在 memset 中初始化為 0 也具有結束標誌符 '\0' 的作用,所以通常我們就寫「0」。

memset 函式的第三個引數 n 的值一般用 sizeof()  獲取,這樣比較專業。注意,如果是對指標變數所指向的記憶體單元進行清零初始化,那麼一定要先對這個指標變數進行初始化,即一定要先讓它指向某個有效的位址。而且用memset給指標變數如p所指向的記憶體單元進行初始化時,n 千萬別寫成 sizeof(p),這是新手經常會犯的錯誤。因為 p 是指標變數,不管 p 指向什麼型別的變數,sizeof(p) 的值都是 4。

# include # include 

int main(void

) printf("\n

");return0;

}

memset函式 記憶體初始化介紹

memset函式詳細說明 收藏 1。void memset void s,int c,size t n 總的作用 將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。2。例子 include void main 3。memset 函式常用於記憶體空間初始化。如 char str 100 mem...

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