超简单的malloc函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 12:06:01
pp=(float *)malloc(sizeof(float));这个函数里的sizeof是不是说开劈一个连续的内存单元,这个连续的单元是多少是不知道的.
1.不知道这样理解对不?
2.为什么链表要开劈了内存才输入值,不开劈而直接输入可以吗?

这个可以看一下malloc函数的原型
void* malloc(int)
malloc的参数是一个整形,表示要申请的内存数,以字节为单位,返回值是指向那段内存的一个指针,是空类型的指针。
而sizeof是一个运算符,通过他能得到一个类型或者变量的占内存的字节数,结果为整形。所以pp=(float *)malloc(sizeof(float));实际上先计算sizeof(float),得到一个float型占内存的字节数,32位环境下应该是4字节,结果就为4,然后malloc(4)申请了一个4字节的内存空间,并返回这块内存区域的地址,然后强制转化为float*类型。
关于链表是每一个链表的元素保存了下一个或上一个元素的地址,自然每一个链表元素都要占内存空间的,当要新加入一个链表的元素时首先要为这个元素分配地址,不然数据没有地方保存。

sizeof(float)是float的字节数,在32位机器上也就是4个字节。
你的这个语句就是说申请4个字节的空间,并把首地址给pp。链表不申请空间是不能输入值的,没地方放。

1.sizeof就是说明开辟多大的内存空间,sizeof后的括号中就是说明开辟多少.
2.如果你不开辟内存,输入的数据放在什么地方呢?所以要先开辟,在输入.