1. 程式人生 > >Memset給非字元型陣列進行賦值

Memset給非字元型陣列進行賦值

       Memset一般都是按位元組進行賦值,都是給字元型陣列賦初值。給字元型陣列賦值的知識及問題可以見百度百科:http://baike.baidu.com/view/982208.htm。我們主要講解給非字元型陣列如int的一維或二維陣列初始化為0的操作。需要的標頭檔案:<memory.h>or <string.h>

一維陣列賦值0:  

int a[5];
memset(a,0,5*sizeof(int));  

//// memset 是按位元組進行賦值,一般對非字元型陣列進行賦初值是不可取的  除了賦值0操作

或者寫為memset(a, 0, sizeof(a));  sizeof(a) 就等於5*sizeof(int) = 20;

如果 是 int*p = new int[5]; 那麼sizeof(p) 就等於4 == sizeof(int*)   包括double*,void* 或者類型別指標等的位元組數都為4 (對於32位系統而言,64位系統則是8)

此外對於動態以為陣列 int*a = new int[5]; memset(a, 0, sizeof(int)*5)也是可以的。

二維陣列賦值0:

	int a[4][4];                             
	cout << sizeof(a) << endl;       // 對二維陣列賦值0操作,對於動態二維陣列不能這樣處理
	memset(a, 0, sizeof(a));

動態二維陣列賦值0:

	long **F = new long*[height];    
	int i,j;
	for(i = 0; i < height; i++)
	{
		F[i] = new long[allStates];
		memset(F[i], 0, sizeof(long)*allStates);   // 二維動態陣列可以這樣初始化
	}
直接對於動態二維陣列memset(F, 0, sizeof(long)*allStates*height);是不行的,因為動態二維陣列申請的空間不一定是連續的,,F指向的空間不連續,這樣賦值就會出錯。