说明这是本人以前写的半成品!没有时间写完,以后有时间在把后面的补充上
专题: 动态内存的分配 传统数组的缺点: 1、数组的长度必须事先制定,且只能是常数,不能是变量。 例如:int a[5]; int len = 5; int a[len]; 2、传统形式定义的数组,该数组的内存程序员无法手动释放。在一个函数运行期间,系统为该函数中数组分配的内存空间会一直存在,知道该函数运行完毕,数组的空间才会被系统释放。 3、数组的长度一旦定义就不能再改变。(数组的的长度不能在函数运行期间动态的扩充或缩小) 4、A函数定义的数组,再A函数运行期间可以被其他函数使用,但是A函数运行完毕之后,A函数中的数组将无法在被其他函数使用。因为函数运行结束后数组释放了。即传统方式定义的数组不能夸函数使用。
5、mallloc函数的使用:原型void*malloc(unsigned int size)
作用:是在内存的动态存储区分配一个长度为size的连续空间,
形参:size的类型为无符号整形(不允许为负数)即申请内存的字节数
返回值:此函数的返回值为所分配区域的第一个字节的地址,或者说此函数是一个指针函数,返回的指针指向该分配域的开头位置,指针的类型为void*,即不指向任何类型的数据,只提供一个地址,简言之就是void *,表示未确定类型的指针。C,C++规定,void *类型可以强转为任何其他类型的的指针。
int *p = (int*)malloc(4); 1、使用malloc函数必须加上头文件malloc.h 2、malloc函数只有一个形参,并且形参是整形 3、4表示请求系统为本程序分配4个字节 4、malloc函数只能返回第一个字节的地址。 动态内存的分配举例: 静态内存和动态内存的比较: 静态内存是由系统自动分配,由系统自动释放 静态内存是在栈中分配的。 动态内存是程序员手动分配,手动释放。 动态内存是在堆中分配的。 跨函数使用内存的问题:
1、malloc函数申请内存分析图:malloc(200);此语句向系统声明我们要申请200字节的内存,并返回给我们所申请200个字节的首地值(即第一个字节的地址编号),返回的首地值类型为void*类型即可以强制转换成任意类型的指针,(char*/int*/double*)malloc(200);向系统声明我们申请的内存用来存数据的类型,同时把返回的void*类型强制转换成我们想要的指针类型,如果是(int*)那么系统会每4个字节来存储一个整形变量,同时还还把返回void*类型的指针强制转换成int*类型 的指针,如果是(double*)系统会每8个字节来存储一个双精度变量,同时还会把返回的void*类型的指针强制转换成double*类型的指针。