C语言 MALLOC

来源:百度知道 编辑:UC知道 时间:2024/05/12 12:18:46
float *cal[12];
int m;
int days_in_month[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

for(m = 0; m < 12; m++) {
cal[m]=(float *)malloc(days_in_month[m] * sizeof(float));
}

我这里不太明白MALLOC的作用..有哪位亲能分析一下么..详细的..详细的..
问个弱弱的问题喔..
为什么不能就直接写cal[m] = &days_in_month[m]呢...?

向系统申请获得一块内存空间(空间的大小以byte计算,作为参数),返回指向这块空间的指针(void*)

MALLOC -- memory allocation. 动态分配内存单元。

这是对
cal[0],cal[1],cal[2],cal[3],。。。cal[11] 十二个指针,分别分配存放单元,单元个数分别是days_in_month[0], days_in_month[1], days_in_month[2], ....(31, 29, 31, 30, 31, 30, 31, 31....)个,每个单元大小是 sizeof(float)。

sizeof(float) 是 表达式,sizeof是运算符,计算结果是字节个数,也就是4。

(float *) 强制转换 malloc函数返回值 为指针指向的首地址。

malloc就是分配内存空间啊。具体可以查一下malloc的说明文档。

cal只是一个float指针数组,如果不分配内存空间的话,是无法使用的。malloc成功之后就可以像二维数组那样使用了。

之所以要用malloc来分配,是因为数组在定义的时候,大小必须是常量,但是程序(应该是模拟一个日历吧)中,每个月的天数是不相同的,不能直接用一个常量进行表示(其实如果不怕有冗余,可以直接用cal[12][31]来定义),但是如果将cal定义成指针数组,对每个月的分配就可以做到各不相同了。

一般要动态定义大小不定的数组,都会用指针+malloc的方法。

*malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

关于分配失败的原因,应该有多种,比如说空间不足就是一种。

int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、