天天看點

memset為int型數組初始化問題

頭檔案:#include <string.h>

memset() 函數用來将指定記憶體的前n個位元組設定為特定的值,其原型為:

    void * memset( void * ptr, int value, size_t num );

參數說明:

  • ptr 為要操作的記憶體的指針。
  • value 為要設定的值。你既可以向 value 傳遞 int 類型的值,也可以傳遞 char 類型的值,int 和 char 可以根據 ASCII 碼互相轉換。
  • num 為 ptr 的前 num 個位元組,size_t 就是unsigned int。

【函數說明】memset() 會将 ptr 所指的記憶體區域的前 num 個位元組的值都設定為 value,然後傳回指向 ptr 的指針。

無法下面這樣初始化,這樣的結果是a被指派成168430090,168430090.。。。。。。。。。

int a[10];
memset(a, 1, sizeof(a));      

這是因為int由4個位元組(說)表示,并且不能得到數組a中整數的期望值。

但我經常看到程式員使用memset将int數組元素設定為0或-1。

int a[10];
int b[10];
memset(a, 0, sizeof(a));  
memset(b, -1, sizeof(b));      
//假設a為int型數組:
memset(a,0x7f,sizeof(a));
//a數組每個空間将被初始化為0x7f7f7f7f,原因是C函數傳參過程中的指針降級,導緻sizeof(a),傳回的是一個 something*指針類型大小的的位元組數,如果是32位,就是4位元組。是以memset按位元組指派。
memset(a,0xaf,sizeof(a));
//a數組每個空間将被初始化為0xafafafaf      
memset為int型數組初始化問題