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
相關文章
相關標籤/搜索