一、C语言[内存静态与动态分配]

一.内存静态分配

静态:在编译时创建,需要合理利用不然会一直浪费资源(不关闭程序不会销毁)

1 全局变量

前要:全局变量写在任何函数体之外,且任何函数都可以调用
内容:全局变量可跨文件调用

2 静态全局变量

格式:static int a = 55;
区别:只能在该文件内调用生效

3 静态局部变量

#include<stdio.h>
extern void no();
int main(){
    no();
    no();
    no();
}
void no(){
    static int dada = 5;
    dada++;
    printf("%d",dada);
}
运行结果:678
但是:没有static 运行结果是666;因为有static在编译时就分配了地址,程序不结束不会销毁,而函数是调用时创建,结束便销毁

二. 内存动态分配

解释:包含函数内的变量都是普通分配的,创建时分配地址,函数调用完毕就会销毁地址;下面介绍这个属于动态创建,函数使用完后并不会销毁(程序结束销毁;free销毁)

1 前要

意义:在未知用户输入需要数组大小的前提下,进行分配,这样能合理分配空间,避免资源浪费
需要:#include <stdlib.h>

2 动态分配与普通分配的区别

区别:C语言,提到的区域大致上分为栈区,堆区,和静态区;普通分配分布在栈区;动态分配分布在堆区,全局变量和静态变量分布在静态区

3 使用

3.1 malloc()

解释:初始化
格式:指针 = (int *)malloc(sizeof(int)*a)需要强制转换,括号填写需要字节的大小
重点:需要free释放内存,不然不会自己释放
结果:成功返回指针的地址,失败返回空指针NULL

3.2 realloc()

解释:改变大小

原理:先判断当前的指针是否有足够的连续空间,如果有,扩大原指针指向的地址,并且将 原指针返回;如果空间不够,先按照新指针指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,同时返回新分配的内存区域的首地址,然后释放旧的地址。

格式:p1 = (int*)realloc(p, sizeof(int) * 15);需要强制转换,第一个参数放malloc初始化的指针,第二个放更改后的总大小

结果:成功返回指针的地址,失败返回空指针NULL

3.3 free()

解释:释放

格式:free(p)释放前面成功创建内存,参数里面填分配的指针指针,系统不会自动释放

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值