首页 > 编程知识 正文

malloc函数用法举例,为什么要用malloc函数

时间:2023-05-03 10:30:25 阅读:49686 作者:1722

# includestdio.h

首先说最基本的语法,最后是完整的例子

# include stdio.h # include malloc.hint main (void ) ) {int i=5; int*p=(int* ) malloc(4) 4; *p=5; free(p; printf (同志们好! n '; 返回0; (/*

2021/5/30 9:30

malloc是内存(内存) allocate的缩写(请求分配内存) )

*/

# includemalloc.h //malloc放在malloc.h文件中

输入主(语音) )。

{

int i=5; //14行

分配了//4字节的静态分配

int*p=(int* ) malloc(4) 4; //17行

//p是指4字节,但p本质上只存储第一个字节地址。

4字节仅由开头地址表示,int *型表示4字节是一个变量单位

//p本身只能指示第一个字节地址作为指针变量,

但是,在p之前定义了数据类型int,取得了p可以指向4个的效果

//p本身的4字节存储器和malloc分配的4个存储器是否是相同的存储器(静态)

//p不是静态的(数据类型变量名称) (malloc ) ) p在堆栈中,malloc在堆栈中) )。

/*

1、要使用malloc函数,必须添加名为malloc.h的头文件

2、malloc函数只有一个波形参数,波形参数为整数

(系统定义时有几个形参) )一个,实参一个,形参只有一个) )、

如果实参为1个形参2个,则程序报告错误。

3、4表示请求系统为本程序分配4字节,malloc(必须是整数),字节不可能是3个半

4、malloc函数只返回第一个字节的地址。

那个第一个字节的地址有实际意义吗?---不,除非定义 数据类型

5、malloc函数被分配4字节,只有第一个字节地址返回p

也就是说,当系统通过p调用malloc函数时,p的值决定malloc

函数的地址,

而malloc函数默认返回第一个字节地址

 

 假设 p 刚好指向某个存储地址(一横代表一个字节地址),

因为malloc 函数刚好返回这一字节地址 (连续分配空间的4个字节的第一个字节地址(首地址))

 

 那这时候,    p 到底占几个字节, p 指向的变量到底占几个字节?

(你不知道在4个字节里头,从第一个字节开始怎么去分配这4个字节,是一个个呢,还是2个2个,还是直接4个就当整体用了)

 

 第一个字节地址本身不能确定它指向的变量到底占几个字节(不能确定它的大小)

 

(int *)malloc(4);把第一字节地址(这个地址本身无实际意义(malloc函数返回的第一个字节类型是void),

不加强制类型转换,地址的位数不能确定

 

 因为你连它是什么类型都不知道,这时候要强制转换成有实际意义的地址,可以让人们使用,看的懂)

强制转换成  一个 整型的地址(int *)

 

 (char*)malloc(100);  // 返回100个字节,一个字节一个变量

 

 (int*)malloc(100);   //  返回值还是一样的,还是第一个字节地址,

但是它知道第一个字节地址代表是整型变量的地址,

 

 mlloc函数就知道虽然只有第一个字节地址但是它知道按4个字节,

4个字节发放分配,最后整体100个字节是25个变量

 

malloc函数虽然返回了第一个字节的地址,但它表示的不是第一个字节的地址,

而是整型变量字节的地址,整型变量的地址肯定是4个,4个字节划分的

 

【注意】这里说的是如果(   )malloc前面不定义数据类型,

就无法确定指针变量所指向第一个字节的地址类型

 

 

   最终分配几个字节:

   p 也是个变量,有空间,需要4个字节保存,地址就是内存单元的编号,有32根地址总线来组合

(一个指针变量无论它指向的变量占几个字节,它本身都只占4个字节)

17行分配了8个字节, p 变量占4个字节,  p 所指向的内存也占4个字节(malloc所分配的)

 

6、 p 本身所占的内存(字节)是静态分配的,p 所指向的内存是动态分配的

 

   */

 

*p = 5;

// *p 是动态分配的 ,* p 表示的是 malloc所使用的 4个字节内存

// 代表的就是一个int 变量,只不过 *p 这个整型变量的内存分配方式和  14行 的 i 变量的分配方式不同

 

 

free(p);  // 终止 动态内存

// free(p); 表示把 p 所指向的内存(字节)给释放掉 ,p本身是静态的,指向地址字节是动态的

 

//本来这4个字节属于当前 叫malloc 的程序使用,所谓分配,

就是4个字节的使用权限给malloc了;而释放就是4个字节内存不能再用,不能写和读

 

//p本身的内存是静态的,不能由程序员手动释放,p 本身的内存(所占的字节)

只能再 p 变量所占的函数运行终止是由系统自动释放

 

printf("同志们好!n");

 

return 0;

}

       

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。