现在的位置: 首页 > 综合 > 正文

Memset给非字符型数组进行赋值

2018年02月19日 ⁄ 综合 ⁄ 共 790字 ⁄ 字号 评论关闭

       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指向的空间不连续,这样赋值就会出错。

抱歉!评论已关闭.