今天学了一个malloc函数,讲的时候说,使用malloc函数要计算字节数。我又去网上查了一下,但发现大多数都只说了要计算字节数,但是没说为什么要计算字节数。因为我试了一下不计算字节数好像也能用,所以很奇怪为什么要计算字节数呢。求解惑
计算字节数是为了确定到底需要分配多少空间,不然你malloc的参数写啥呢?写少了,可能会导致越界写数据,程序崩溃;如果写多了,就会浪费空间。
malloc函数的用法就是你需要申请多大的内存空间,直接填到参数就行了,返回成功就是申请到了内存,比如申请 100 字节,char * p = (char *)malloc(100) ,判断 p 返回不为 NULL 就表示申请内存成功了。
不知道你这个问题是否已经解决, 如果还没有解决的话:假设我想存储班级的信息,学号、姓名、年龄都有了,可是使用静态的方式定义一个结构体的话,就要为每个人定义一个结构体变量,如果班级有一百多号人,那就要定义一百个变量?NO,C语言有动态管理内存的函数malloc,该函数能在内存堆中开辟指定大小的空间。比如,我想开辟上面定义的结构体大小的空间就这么写
(XUE*)malloc(sizeof(XUE))
第一个小括号代表开辟了该块空间之后返回什么类型,(XUE*)代表返回XUE结构体指针类型(之前已经将结构体重命名为XUE了),如果你不想写重命名后的名字,可以这样写(struct xuesheng*),记住一定是返回指针类型,也不能写其它的指针类型,如int *、char *等都是不行的,因为前面已经说过的类型决定该指针能指向什么类型的变量,你想想,你开辟了该结构体类型而返回整型,那样能行吗。
第二个小括号代表开辟空间的大小。sizeof()也是一个函数,该函数用于统计某变量的空间大小,sizeof(XUE)的作用就是统计XUE结构体的大小。