变量 学习变量

定义:意味着要在内存中开辟空间
c语言的内存:
内核
堆区:由程序员手动开辟与释放
栈区:由系统自动开辟与释放
静态区:.bss未初始化的全局变量和静态变量
             .data初始化过的全局变量和静态变量
常量区
代码段

如何定义一个变量?
存储类型  数据类型  变量名;
存储类型:决定了开辟的空间在内存分区中的哪个区
数据类型:决定了要开辟的内存空间的大小
变量名:开辟的内存空间的名字


局部变量:
定义在函数体(任何函数体)内部的变量

全局变量
定义在函数体外的变量

存储类型
存储类型:auto、extern、static、register
auto:修饰的变量存储在栈区,只能修饰局部变量
extern:修饰的变量存储在静态区(.bss和.data统称为静态区),只能修饰全局变量
static:修饰的变量存储在静态区,局部变量和全局变量都可以修饰
register:修饰的变量存储在寄存器中,只能修饰局部变量
总结:
1、除了static和register修饰的局部变量,其他都存储在栈区
2、全局变量存储在静态区
3、静态变量存储在静态区


初始化
初始化:在定义变量时对变量赋值
(1)int a = 10;//初始化
(2)int a;
         a = 10;//赋值


总结:
(1)全局变量没有初始化其值默认为0
(2)局部变量没有初始化其值为随机值
auto:修饰局部变量,存储在栈区
register:修饰局部变量,存储在寄存器中。建议将变量存储在寄存器中,可以提高程序的运行速度,由于寄存器的数目比较少,最终是否存储在寄存器中,取决于编译器,如果没有寄存器,就存在栈区
extern:修饰全局变量,存储在静态区
注意:程序可以由多个.c文件组成,但是一个程序只能有且仅有一个main函数
main.c  gcc main.c->a.out(程序)

作用:告诉编译器,这个全局变量已经在其他文件定义过了
static:修饰的变量存储在静态区,既可以修饰局部变量又可以修饰全局变量
1、static修饰局部变量,延长了局部变量的生命周期,如果局部变量没有初始化,其值为0,如果初始化,只被初始化一次

2、static修饰全局变量/函数,只能在本文件内使用(限制了全局变量的作用域)


生命周期:
从什么时候开辟空间到什么时候释放空间
作用域:
使用的范围
局部变量:
生命周期:从定义开始,到模块(大括号)结束
作用域:大括号内
static修饰的局部变量:
生命周期:从定义开始,到程序结束
作用域:大括号
全局变量:
生命周期:从定义开始,到程序结束
作用域:整个程序
static修饰的全局变量:
生命周期:从定义开始,到程序结束
作用域:本文件内

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值