c中malloc和memset在多维数组上的应用

来源:本站
导读:目前正在解读《c中malloc和memset在多维数组上的应用》的相关信息,《c中malloc和memset在多维数组上的应用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《c中malloc和memset在多维数组上的应用》的详细说明。

两者都是对内存进行操作的函数。应用在多维数组上时,需特别注意一下。

首先看看两者原型。1.malloc函数,用于从堆上分配指定字节的内存空间。void * malloc(size_t n);n为要求分配的内存字节数。如果执行成功,函数返回获得的内存空间的首地址;执行失败,返回值为NULL。由于函数返回值值的类型为void的指针,因此,可以将void指针类型转换后赋值给任意类型指针,这样就可以通过操作该类型指针来操作从堆上获得的内存空间。malloc函数分配得到的内存空间是未初始化的。有时候,在使用前需要对该内存空间进行初始化,此时用上memset。2.memset函数void * memset (void * p,int c,size_t n);指针p为所操作的内存空间的首地址,c为每个字节所赋的值,n为所操作内存空间的字节长度,也就是内存被赋值为c的字节数。注意的它是以字节为单位进行赋值的,赋值范围是0x00~0xFF。在多维数组上的应用。如二维。 double **weight; //二维数组weight[n][m] weight=(double**)malloc(n*sizeof(double*)); //注意是sizeof里头是double*而不是double。该维装的是指针 int i=0; for(;i<n;i++){ weight[i]=(double*)malloc(n*sizeof(double)); memset(weight[i],0,n*sizeof(double)); //正确。注意是对weight[i],而不是weight } //memset(weight,0,sizeof(n*n*sizeof(double)); //这样的统一对整个二维数组初始化是错误的,因为该二维数组是通过分次malloc得到的,各内存不一定连续 //但如果是直接声明的多维数组如a[5][5],其内存肯定是连续的,此时统一memset没问题。

提醒:《c中malloc和memset在多维数组上的应用》最后刷新时间 2024-03-14 01:05:32,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《c中malloc和memset在多维数组上的应用》该内容的真实性请自行鉴别。