malloc都动态申请内存

xiaoxiao2021-02-28  47

说明这是本人以前写的半成品!没有时间写完,以后有时间在把后面的补充上

专题:     动态内存的分配         传统数组的缺点:  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*类型的指针。

 

 

 

 

 

        

转载请注明原文地址: https://www.6miu.com/read-2613429.html

最新回复(0)