pp=(float *)malloc(sizeof(float));这个函数里的sizeof是不是说开劈一个连续的内存单元,这个连续的单元是多少是不知道的.
1.不知道这样理解对不?
2.为什么链表要开劈了内存才输入值,不开劈而直接输入可以吗?
超简单的malloc函数问题
答案:3 悬赏:20
解决时间 2021-04-07 19:42
- 提问者网友:他的思颖
- 2021-04-07 08:49
最佳答案
- 二级知识专家网友:你把微笑给了谁
- 2021-04-07 09:28
这个可以看一下malloc函数的原型
void* malloc(int)
malloc的参数是一个整形,表示要申请的内存数,以字节为单位,返回值是指向那段内存的一个指针,是空类型的指针。
而sizeof是一个运算符,通过他能得到一个类型或者变量的占内存的字节数,结果为整形。所以pp=(float *)malloc(sizeof(float));实际上先计算sizeof(float),得到一个float型占内存的字节数,32位环境下应该是4字节,结果就为4,然后malloc(4)申请了一个4字节的内存空间,并返回这块内存区域的地址,然后强制转化为float*类型。
关于链表是每一个链表的元素保存了下一个或上一个元素的地址,自然每一个链表元素都要占内存空间的,当要新加入一个链表的元素时首先要为这个元素分配地址,不然数据没有地方保存。
void* malloc(int)
malloc的参数是一个整形,表示要申请的内存数,以字节为单位,返回值是指向那段内存的一个指针,是空类型的指针。
而sizeof是一个运算符,通过他能得到一个类型或者变量的占内存的字节数,结果为整形。所以pp=(float *)malloc(sizeof(float));实际上先计算sizeof(float),得到一个float型占内存的字节数,32位环境下应该是4字节,结果就为4,然后malloc(4)申请了一个4字节的内存空间,并返回这块内存区域的地址,然后强制转化为float*类型。
关于链表是每一个链表的元素保存了下一个或上一个元素的地址,自然每一个链表元素都要占内存空间的,当要新加入一个链表的元素时首先要为这个元素分配地址,不然数据没有地方保存。
全部回答
- 1楼网友:而你却相形见绌
- 2021-04-07 11:01
必须使用指针来接收改函数的返回值,可以通过该指针来释放内存
void *getmemory(int size)
{
return malloc(size);
}
void main()
{
void *p = getmemory(100);
free(p);
p = null;
}
- 2楼网友:随心随缘不随便
- 2021-04-07 09:52
1.sizeof就是说明开辟多大的内存空间,sizeof后的括号中就是说明开辟多少.
2.如果你不开辟内存,输入的数据放在什么地方呢?所以要先开辟,在输入.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯