memset 函式初始化

2021-10-25 07:57:48 字數 1536 閱讀 7610

memset()函式標頭檔案及原型:

# include void *memset(void *s, int c, unsigned long n);
功能:對一段申請的記憶體進行初始化,mem即memory(記憶體),memset即給記憶體設定(初值)。

引數說明:將(指標變數)s所指向的記憶體單元中的前n個位元組用"整型"資料c替換,即完成初始化。這裡引數型別雖然是整形,但測試發現也可以是其它型別。最後返回資料為型別void *。

1 、對字元陣列進行「初始化」

#include#includeusing namespace std;

int main()

對新建立的字元陣列b進行初始化為「this is string.h library function」 ,又接著使用memset(b,'$',7)進行「初始化」,輸出結果為:

$$$$$$$string.h library function

即將前7個位元組的資料替換為字元$(這裡就不是int型的)。因為乙個char型別元素佔乙個位元組。

2 、對 int 型變數進行「初始化」

#include#includeusing namespace std;

int main()

int型變數a的初值為0xffff, 轉為二進位制即 1111 1111 1111 1111, 即十進位制數 65535

現使用memset(&a,0,1)將前1個位元組的內容替換為0,

預期輸出:0000 0000 1111 1111 ,即十進位制數 255,錯誤。

正確輸出   1111  1111  0000  0000, 即十進位制數 65280,正確。

可知,使用memset函式對int 型變數a 的前1個位元組進行記憶體替換是從低位開始,而不是高位。

3 、對 int 型陣列進行「初始化」

#include#includeusing namespace std;

int main()

輸出結果:16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009

為什麼每個元素的值是16843009?

題意:建立乙個int型陣列,使用memset(c,1,sizeof(c)) 對其進行初始化,sizeof(c)計算資料c 所佔的位元組數,乙個int型元素佔4個位元組,這裡是10個元素,所以sizeof(c)的值為40,即將前40個位元組的內容替換為1。

表面理解是將前40個位元組的內容全部替換為1,實際是將每1個位元組的內容都替換為1,即 0000 0001。而每個元素佔4個位元組,所以對每個陣列元素而言就有四個0000 0001:

0000 0001    0000 0001    0000 0001    0000 0001   

即            1   0000 0001    0000 0001    0000 0001 ,轉為十進位制是16843009

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

memset 函式初始化問題

話說剛開始使用memset的時候一直以為memset是對每乙個int賦值的,心裡想有了memset還要for迴圈對陣列進行初始化幹嘛。但其實memset這個函式的作用是將數字以單個位元組逐個拷貝的方式放到指定的記憶體中去 memset dp,0,sizeof dp int型別的變數一般占用4個位元組...