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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM