程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> memset 初始化數組,memset數組

memset 初始化數組,memset數組

編輯:C++入門知識

memset 初始化數組,memset數組


memset是初始化一段內存區域的函數,其頭文件是<string.h>,以前經常使用出現錯誤,整理一下。

C++ Reference對於memset的定義為:

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

其中,對於memset的各個參數的定義如下:

ptr: Pointer to the block of memory to fill.

value: Value to be set. The value is passed as an int, but the function fills the block of memory using the unsigned char conversion of this value.、

num:Number of bytes to be set to the value.

在參數的說明中,提到value值是按照int類型進行的傳遞,但是在填充的時候是將value值轉換為unsigned char進行填充。因此,在使用memset進行內存初始化的時候,value值應該傳遞的是一個字節的值。

對int類型的內存區域進行初始化,ptr的類型是int*,舉例說明一下:

1.   將內存初始化為0

memset(ptr,0,sizeof(ptr));

2.  將內存初始化為-1

memset(ptr,0xff,sizeof(ptr));

  因為按照字節進行填充,那麼value值為0xff,將會把內存的每個字節都填充為0xff,則int值的區域為全1,那麼int值就是-1。

3.  將內存初始化為極大值

memset(ptr,0x3f,sizeof(ptr));

  這段初始化代碼初始出來的int值大小是1061109567

如果要將int內存區域統一初始化為1,那memset就無能為力了。

   


memset函數給int初始化

memset memcpy 都是 string 字符串處理函數,不是為int 型做的。

0 又 等於 NULL
所以 memset 0 沒問題。
但是 其它數字會看作是 字符,不會對應相應的 整形數字。
系統把那字符 計算成整形結果後去儲存,所以得到 奇怪的數字。
 

memset函數可以否對結構數組進行初始化?

可以,例如:

//---------------------------------------------------------------------------

#include <stdio.h>
#include <string.h>

typedef struct{
int a;
int b;
} sta;
int main(void)
{
sta a[10];
memset(a,0,sizeof(sta)*10); /*將a數組中的每個元素的每個成員全部初始化為0*/
return 0;
}
//---------------------------------------------------------------------------
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved