malloc()动态内存分配

分配内存:malloc()和free()

12.4,p396
1,所有程序都必须留有足够的内存来存储程序使用的数据,这些内存有的是自动分配

float x;

char place[] = "Dancing"

2,可以声明预留

int place[100];

3,malloc()函数

#include <stdio.h>
#include <stdlib.h>

使用malloc()函数的头文件。

int main(void){
    int a[5]={4,10,2,8,6};
    printf("请输入您需要的数组的长度:len = ");
    scanf("%d",&len);
    int * pArr = (int *)malloc(sizeof (int) * len);
  • sizeof(20) 申请20个字节
  • int int字节。
  • malloc函数只能返回第一个字节地址,无论一个变量占几个字节它都只返回第一个字节地址,
  • (int *)强制类型转换,转换成第一个int类型变量的地址
  • 写完malloc()就写指针写数组都一样了。
  *pArr = 4;    //类似a[0]=4  
    pArr[1]=10;    //类似a[1]=10;
    printf("%d %d",*pArr,pArr[1]);    //我们可以把pArr当作一个普通数组来使用
    for(int i = 0;i<len;++i)
        scanf("%d",&pArr[i]);
    for(i=0;i<len;++i)
        printf("%d\n",*(pArr+i)); 
    free(pArr);    //把pArr所代表的动态分配的20个字节的内存释放 
     
    return 0;
} 

malloc()函数

  • 接受参数:所需内存字节数;
  • malloc会找到合适的空闲内存块,内存块的匿名的,即不会为它赋名;
  • 要把地址赋值给一个指针变量,并使用指针访问这块内存;
  • 返回值:内存块的首字节字母;
  • malloc()可用于返回指向数组的指针、指向结构的指针等。所以通常把返回值强制转换为匹配的类型。
  • 指向void的指针赋给指针不用考虑类型。
  • 如果内存分配失败,返回空指针。

ptd = (int *)malloc(30 * sizeof(int));

  1. 为30个int类型的值请求空间;
  2. 设置ptd指向该位置;
  3. ptd被声明为指向一个int类型而不是指向30个int类型的块
  4. 数组名是该数组首元素的地址,让ptd指向首元素,就可以像使用数组名一样使用它。

free()函数

  1. 参数是个指针,指向malloc()返回的地址
  2. free()释放malloc分配的内存
  3. 动态分布,在销毁指针之前,一定要记得释放内存,不然会导致内存泄漏。

创建链表

  1. 使用malloc()函数为结构分配足够的空间;
  2. 储存结构的地址;
  3. 把当前信息拷贝到结构中。

释放链表

  1. 为每个已经没配的结构都调用free()函数。

链表结点的定义一定要用指针来对结点进行间接访问(每个链表结点,可能会发生删除插入操作,所以注定了结点结构体中的指针肯定会不断的发生变化)

在传入头结点指针给调用函数时,在函数的操作过程中,会给头结点分配内存空间,对其进行修改。
所以我们要用指向头结点指针的指针来作为函数的参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值