内存的分配问题:所有的程序都需要来为它分配内存空间来存储所需要的数据。正如我们写程序:
int a;
float b;
系统都会默认的的为变量a和变量b留出空间
但我们可以在程序运行的时候来分配更多的内存(动态分配)
一、函数malloc()
1、参数:所需内存的字节数(sizeof(类型名))
2、返回值:返回一个指针类型(返回内存第一个字节的地址)
3、用一个指针变量去接收
返回类型是void *类型,如果你要使用一个指针变量接收它,需要用到强制类型转换。
eg:double *p;
p=(double *)malloc(30*sizeof(double));
这段代码:请求一个30个double类型的空间,并返回double类型的指针,p是作为指向一个double类型值的指针而声明的,而不是指向30个double类型值数据块的指针。如果p指向第一个内存块的第一个元素,就可以像数组名一样去使用.
即 可以用p[0]来访问第一个元素,p[1]来访问第二个元素。(用数组名的方式去使用 指针)
二、函数calloc()
1、参数:两个参数 (所需内存单元的数量,每个单元占多少字节)
malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。
2、返回值:返回一个指针类型(返回内存第一个字节的地址)
3、用一个指针变量去接收
eg:
long * newmen;
newmen=(long*)calloc(100,sizeof(long));
4、特性:将块中的全部位置为0.
三:函数free()
1、原型:void free(void *p)
2、功能:将指针变量p指向的存储空间释放,交还给系统。
(p只能是程序中此前最后一次调用malloc或calloc函数所返回的地址)
int *p,*q=(int *)calloc(10,sizeof(int));
p=q;
q++;
free(p);//不可以改用free(q)