现在写这个的时候我也不懂,可能写着写着就懂了!方便他人也方便了自己!
由于初学,若有疏漏欢迎批评,加以改正!
这篇文章的思想来自于以下链接:
-
c primer plus;
-
https://blog.csdn.net/abc882715/article/details/78438508
应该差不多了
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。(百科)malloc在这里:#include <stdlib.h>或者#include <malloc.h>
int等等,会根据相应类型来分配大小!而malloc会更灵活些,它会根据需求来申请一段内存,因分配的内存有随机性,所以是动态的!
malloc()函数会找 到合适的空闲内存块,这样的内存是匿名的。也就是说, malloc()分配内 存,但是不会为其赋名。然而,它确实返回动态分配内存块的首字节地址。
因指针可以访问地址,而malloc返回的是地址,所以可以用指针来访问它。返回的是首地址,所以就想数组的名字样(如a[20],这个数组名是a,首地址也是a,却可以通过printf("%s",a)来输出,就是因为有可以通过首地址来往下一个地址连续解析的功能;
然而, 从ANSI C标准开始,C使用一个新的类型:指向void的指针。该类型相当于 一个“通用指针”(有引号)。malloc()函数可用于返回指向数组的指针、指向结构的指针等,所以通常该函数的返回值会被强制转换为匹配的类型.
栗子:double * ptd;
ptd = (double *) malloc(30 * sizeof(double));
这个的ptd是一个double型指针,(double*)是强制转换成double型指针,malloc(30*sizeof(double))=====要30个double的字节长度的地址,