设为首页 加入收藏

TOP

c中malloc和memset在多维数组上的应用
2014-11-23 21:42:05 来源: 作者: 【 】 浏览:1
Tags: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
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语言函数集(一) 下一篇C语言函数集(二)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: