c语言笔记 存储期

目录

基本概念

自动存储期

静态存储期

自定义存储期


基本概念

        在c语言中变量是有生存周期的,一个变量向系统申请内存就是变量的诞生,到内存被释放。这个从诞生到释放的过程就是生命周期。
根据定义的不同我们分为三种生命周期的情况:
  1. 自动存储期
  2. 静态存储期
  3. 静态存储期

自动存储期

        知识:自动存储期是指在栈内存中的变量,这些变量不需要我们开发者去担心内存的问题,因为在栈内存中是会被系统释放的,也就是说在{}内生效,出{}外内存就会被系统自动回收,在变量定义处分配空间,出了作用域就被系统释放。
下面三种概念是等价的:
  1. 自动变量:在存储期角度上,描述变量的时间性
  2. 临时变量:同上
  3. 局部变量:在作用域角度上,描述变量的空间性

静态存储期

       知识: 静态存储期是值在数据段中分配的变量,也称为静态变量。这一类的变量生命周期比较长,会跟着程序结束而释放,不会在程序运行时候被系统自动释放,生命周期是恒定的,跟谁着整个程序。
注意:
    1.被static修饰的局部或者全局变量 具有静态存储期
    2.全局变量都具有静态存储期
被static修饰的变量 不是说不能修改值,而是它的内存存储不会变。
    关于static修饰需要注意以下几点:
  1. 被static修饰的变量,如果没有初始化就会默认值为0;
  2. 被static修饰修饰的全局变量会变成仅本文见;
  3. 被statici修饰的局部变量会从栈内存移动到数据段;
  4. 被static修饰的局部变量会变成静态数据,跟随着整个程序吗,随着程序的结束而被释放;
  5. 被static修饰的局部变量只会初始化一次,下次运行时候会变成修改后的值;
  6. static修饰的变量不会消失,但是不能在其他函数内使用,可以通过指针去访问;
        如果一个变量被static修饰,并且是在函数内部定义的,那么它的作用域仅限于该函数内部。其他函数不能直接访问这个变量,虽然其他函数不能直接访问static修饰的变量,但如果通过指针传递该变量的地址,其他函数可以通过指针间接访问该变量。在C语言中,static修饰的变量的生命周期是整个程序的运行期间。即使函数执行完毕,静态变量的值仍然存在,直到程序结束。

自定义存储期

        相比于上面的两类存储期,一种是由系统自动释放,在{}内分配,出{}被释放;一种是跟随着程序的结束而消失,那么对于这些不能控制的生命周期,我们自定义存储期是可以控制变量的生命周期的,申请一块内存和释放一块内存都是由开发者决定,那么我们就要用到自定义存储期。
分配在堆内存,堆空间内的变量是具有自定义存储期的。
  1. malloc函数;
  2. calloc函数;
  3. bzero函数;
  4. free函数;
        字符串函数的头文件都是#include
注意:
1.如果说我分配变量到堆内存,然后我不释放它,那么它是跟谁着整个程序的结束而结束; 
2.使用malloc函数后,申请的内存初始化值是随机的;
3.使用calloc函数后,申请的内存初始化是0;
4.free函数只能释放堆内存的空间,不能释放其他内存区域;
5.free函数释放后,原先的指针依旧指向这块空间,会变成野指针所以必须要置空;
6.free函数释放后,里面的数值是不会改变,仅仅是该内存被系统回收;
  • 释放内存并不会对内存做任何修改,更不会将内存清零。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值