2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 二维数组传入函数_C++二维动态数组memset()函数初始化

二维数组传入函数_C++二维动态数组memset()函数初始化

时间:2019-04-02 05:48:48

相关推荐

二维数组传入函数_C++二维动态数组memset()函数初始化

来源:/longhopefor/article/details/20994919

先说说memset函数:

void *memset(void *s,int c,size_t n)

作用:将已开辟内存空间 s 的首 n 个字节的值设设为 c。

memset()的内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));

memset() 函数常用于内存空间初始化。如:

char str[100];

memset(str,0,sizeof(str));

先说说一维数组的动态分配和初始化:

一维数组的动态分配,初始化和撤销比较简单,如下所示:

动态分配:int *array=new int [10];//动态分配10个空间

初始化:memset(array,0,sizeof(array));或者memset(array,0,10*sizeof(int));

撤销:delete [] array;

下面说说二维数组:

二维数组(n行m列)利用new来进行动态分配实际上相当于对n个m元数组进行动态分配,只不过我们不能按照动态分配一维数组的方法来这项操作。MSVC目前还没有这般的人性化,具体应该这样做:

int **array;

array=new int *[10];

for(int i=0;i<10;i++)

array[i]=new int [5];

上面的操作完成了一个10行5列的二维数组array[10][5]的动态分配,可以看到我们先动态分配了一个10单元的数组的指针的指针的首地址给**array,然后再对其每个首地址进行遍历,同时完成一个5单元的数组的动态分分配,并把首地址给*array[i],从而最终完成了二维数组array[10][5]的动态分配。我们可以依此类推得到三维以至多维的数组的动态分配方法。

二维数组的初始化:如果把一维数组初始化办法照搬过来就会发现对于动态分配的二维数组并不适用。从上面介绍可以看出memset只能作用于一个一维数组*array,因此最好的办法就是和二维数组的动态分配结合起来,new一个,memset一个。具体写法如下:

int **array;

array=new int *[10];

for(int i=0;i<10;i++)

{

array[i]=new int [5];

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

}

二维数组的撤销:

for (int i = 0; i < 10; i ++) {

delete[] array[i];

array[i] = NULL;//不要忘记,释放空间后p[i]不会自动指向NULL值,还在原处,只是释放内存而已,仅此而已。

}

delete [] array;

array=NULL;

【注意事项】使用memset()函数初始化二维数组时要千万小心:1.二维整型数组利用memset()函数初始化时,只能初始化为0或者-1,否则二维整型数组的值将为随机数。2.二维char数组利用memset()函数初始化时不受限制,可初始化为任意字符。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。