long *p_num = ( long* )malloc( sizeof( long )* len );是什么意思?

来源:百度知道 编辑:UC知道 时间:2024/05/30 14:54:12
具体解释一下上面的代码,是怎么样的一个内存分配的。

long *p_num -- 声明 p_num 是长整型指针。

sizeof( long ) -- sizeof 是运算符
sizeof( long ) -- 计算出 一个 long 型(长整型)变量 需要的内存单元个数,不同的操作系统或编译器有各自不同的定义,也许是4 bytes,也许是别的值。用 sizeof(long)计算,最可靠。
len -- 个数,数组 p_num[len] 中元素的个数。
sizeof( long )* len -- 总的单元个数
malloc -- 是函数,做 分配内存的工作,分配的 单元总个数是 sizeof( long )* len,从某一地址起,连续分配(单元号一个接一个)。

( long* ) -- 算出这串连续的内存单元的首地址
赋给 p_num

程序里,除了把p_num 当指针用以外,也可以把p_num 当一维数组使用,
数组元素 p_num[i],i=0,1,2,...len-1.

分配了4len个字节.
然后让p_num指向分配的第一个位置.
p_sum把 4len看作len个long数.

sizeof() 计算一个对象所占字节数.
malloc() 从堆上分配内存.

p_num是一个长整型的指针,malloc的功能是动态分配内存,sizeof( long )是计算长整型数字的字节大小,因此这条语句是给p_num动态分配一个大小为长整型(long)大小的内存。

分配了1个类似
数组的空间

每个元素都是long类型
有len 个

动态分配一个指向长整型数的指针,大小为4*len
因为长整型数占4个字节