首页 > 编程知识 正文

c语言中malloc的用法,malloc函数前面的指针类型

时间:2023-05-03 06:43:56 阅读:178999 作者:3459

一、为什么c语言中要有malloc

malloc是指内存分配动态分配内存。 为了弥补malloc出现时静态内存分配的缺点,静态分配内存有以下缺点。

1、例如,在int a[5]这样的以往的一维排列的情况下,为了使用以往的一维排列,需要事先指定排列的长度,且排列的长度必须是常数(宏定义的常数)

2、传统数组(静态分配)不能手动释放。 只能等待系统释放。 静态分配的变量在该函数内执行时有效,在执行包含静态分配变量的函数后,会自动释放其内存。 静态分配的内存分配给堆栈。 其实,用c语言的函数调用也是通过堆栈实现的。 堆栈这一数据结构的特征之一是“先进先出”。 因此,调用函数时,请先将其推入堆栈,然后从最上面的函数开始执行,直到最后main函数结束。 动态分配在malloc中分配,在堆中分配。 堆是一种排序方法,而不是数据结构,按堆栈排序。

3、传统数组的长度一经定义,不能更改。 例如,假设以前分配的大小为100的业务。 但是,现在由于业务数量的增加,按原来的尺寸是不能满足的。

4、不在函数之间调用静态分配意味着一个函数中的内存不能在另一个函数中进行管理。 静态分配只对当前函数有效,执行具有静态分配的函数后,无法在其他函数中调用该变量。

二、malloc是什么

malloc实际上是可以动态分配内存的函数,可以很好地弥补上述静态分配的缺点。

三、malloc怎么使用

1 .使用malloc函数时,需要包含头文件#include malloc.h

2、malloc函数只接受一个形参。 int* p=(int* ) malloc ) sizeof(int ) )。首先说明这个词的意思,int*p表示以int型地址为内容的指针变量,p这个变量是4字节) )占有一部分计算机) 因为这些指针变量存储8位十六进制的地址,所以占用4个字节。 当然,这些在某些计算机上,并不都是。 说起地址,与计算机的地址总线有关。 假设计算机有32条地址总线,每条地址总线只有两种状态(1或0 )。 如果32条地址线全部为1,则正好是8位16进制,1位16进制为4个2进制)2^4=16 )。 32条地址总线可以表示2^10*2^10*2^10*2^2的状态,可表示的最大内存为4G。 这意味着32条地址总线(即4字节指针变量)最多可以表示4G的内存。 malloc函数返回开放空间的起始地址。 加(int * )的目的是让计算机知道如何分割这个开放空间。 char、int、long这种类型的字节大小不同,因此可以知道起始地址和以多少字节为单位。 所以,这句话一共打开了8个字节。 所以,我没有直接写4,而是写了sizeof(int )。

3、malloc穿越空间返回的起始地址被动态地分配。

四、malloc函数的使用例子

# include stdio.h # include malloc.hint main (void ) ) {int i=5; 分配了//4字节静态分配的int*p=(int* ) malloc(sizeof(4) ); //指针变量p为静态分配,malloc打开的空间为动态分配*p=5; //*p表示int变量,指针变量p表示以int型地址为内容的变量free(P )。 //freep(p )表示释放p指向的内存。 p本身的内存是静态的,不能由程序员手动释放。 //p本身的内存只是在有p变量的函数执行结束时,系统自动释放return 0。 } # include stdio.h # include malloc.hvoidf (int * q ) ) {*q=200; //free(q ); 释放//q指向的内存。 否则,以后使用*p时会报告错误。 因为p所指的内容已经被释放了。 (intmain ) void ) int*p=(int* ) malloc ) sizeof ) int ) ); //sizeof(int )返回值为int所占的字节数*p=10; f(p ); //p是int *类型printf(%d(n ),*p ); 返回0; () ) ) ) )。

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