关于malloc和sizeof的用法
Posted 狼太白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于malloc和sizeof的用法相关的知识,希望对你有一定的参考价值。
问题1:
1.
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
2.
newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
其中L是已经定义的线性表,LIST_INIT_SIZE是线性表存储空间的初始分配量,listsize是当前分配的存储容量(以sizeof(ElemType)为单位)
解释:
第一个句子:
用malloc分配一段这么LIST_INIT_SIZE*sizeof(ElemType)多个字节的内存段,它返回一个指向该内存段首字节的指针变量,然后把这个指针变量强制转换为ElemType*类型,再把这个经转换的指针变量赋给L的elem成员
第二个句子:
先看一段话:
realloc语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小,不然的话会导致数据丢失!
所以你这个句子的意思是:把L的elem指向的那段内存扩大LISTINCREMENT*sizeof(ElemType)个字节。
sizeof的用法:这是一个运算符(而不是一个函数,这点认识很重要)
sizeof(类型说明符,数组名或表达式)
或
sizeof 变量名
得到一个对象或者类型所占的内存字节数。
例如,如果你的机器上int占4字节,那么sizeof(int)就是4
malloc用法:
它是一个函数,原型是void *malloc(size_t size);
前面提过了,就是分配size个字节的内存,然后返回指向这段内存首字节的指针,void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...),所以你要用它指向什么数据,一般就要在malloc前加一个强制转换,把这个指针转为适合你使用的类型。
问题2:
L.elem =(int*)malloc(LIST_INIT_SIZE * size(int)); 后面加这句话if(!L.elem) exit(OVERFLOW);
if(L.elem == NULL)
{
printf( "不能成功分配存储空间。");
exit(1);
}
以上是关于关于malloc和sizeof的用法的主要内容,如果未能解决你的问题,请参考以下文章