动态内存分配

已经掌握的内存开辟方式有:

int sum = 20;//在栈中开辟4个字节的空间
char arr[10] = {0};//在栈中开辟10个字节的连续空间

这种开辟空间的方式有两个特点

1>空间开辟大小是固定的

2>数组在声明时,必须指定数组的长度,它所需要的内存在编译时分配

但对于空间的需求,有的时候,需要的空间大小是在程序运行时才能知道。

动态内存函数的介绍

malloc和free

void* malloc(size_t size)

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。

malloc(申请空间) 使用malloc分配空间是在堆中分配空间

void* free(void* memblock)

free函数用来释放动态开辟的内存。

free(释放空间)

(malloc和free都声明在stdlib.h的头文件中)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
//自定义结构体
typedef struct Student {
        char name[256];
        int age;
        float weight;
}student_t;
int main(){
    //1.动态分配空间
    student_t* p_stu = (student_t*)malloc(sizeof(student_t));
    //2.判断分配是否成功
    if(p_stu == NULL)
    {
          //打印分配失败的信息
          //strerror作用是将错误编码转换为对应的错误信息字符串
          printf("malloc failed:%s\n",strerror(errno));
          return -1;
    }
    //3.给空间进行赋值
    //字符串的拷贝strcpy
    strcpy(p_stu->name,"伟");
    p_stu->age = 15;
    p_stu->weight = 80.6;
    //4.通过地址获取值
    printf("name=%s,age=%d,weight=%.2f",p_stu->name,p_stu->age,p_stu->weight);
    //5.手动释放空间
    free(p_stu);
    //释放完空间,进行置空操作
    p_stu = NULL;
    return 0;

calloc

calloc函数也是用来动态内存分配

void* calloc(size_t num,size_t size);

函数的功能是为num个大小为size的元素开辟空间,并且把空间的每个字节初始化为0

与malloc函数的区别只在于calloc会返回地址之前把申请空间的每个字节初始化为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值