C语言变量的分类(C语言六)

一.变量的分类

1.分类

全局变量: 声明在函数之外的变量

局部变量: 声明函数内部的变量

块变量: 生命在语句块(大括号)中的变量

2.不同变量的特性

变量的特性分为作用域和生命周期

作用域: 变量可以在什么位置使用,什么位置不能使用,变量的作用域包含可以使用该变量的所有语句

生命周期: 变量什么时候创建,什么时候销毁

(1)全局变量

全局变量的作用域包含程序中的所有语句

为被初始化的全局变量会被自动初始化为0

全局变量的声明周期是整个程序运行期间

全局变量能不用就不用

(2)局部变量

局部变量的作用域包含它所在函数的所有语句(先声明)

局部变量的作用域是整个函数运行期间,函数被调用时创建,返回时销毁

形式参数的作用域和生命周期和局部变量一样

(3)块变量

块变量的作用域包含它所在语句块的所有语句(先声明)

块变量的声明周期是所在语句块运行期间,每次运行语句块都会产生一个新的块变量

3.变量的修饰符

变量的修饰符用于在变量声明修饰变量,改变变量的属性,修饰符属于关键字

语法:

   修饰符 变量类型 变量名; 

(1)auto

用来声明自动变量

所有的局部变量默认都是自动变量,全局变量不能声明为自动变量

通常都不用写

(2)static

用来声明静态变量/静态函数

静态变量会改变变量的作用域和生命周期,分为静态局部变量和静态全局变量

静态局部变量的生命周期变为整个程序运行期间,作用域还是所在函数内部

静态变量的初始化语句只会执行一次,未初始化的静态变量会被自动初始化为0

静态全局变量的生命周期还是整个程序运行期间,作用域变为只包含声明它的那个文件

C语言的函数默认为全局函数,可以在程序中任意位置调用,静态函数只能被本文件中的函数调用

非外部接口的函数可以声明为静态函数

(3)const

用来修饰不可赋值的变量,如果一个变量在声明初始化之后不希望被修改,可以声明为const

const修饰的变量应该进行初始化

const修饰的变量有可能改变,部分编译器可用scanf修改

const常用来修饰函数的形参,保证该参数在函数内部不会被修改

(4)volatile

用于修饰易变的变量,防止编译器优化

(5)extern(多文件)

用来修饰外部变量(全局),表示该变量在其他文件中定义

4.变量的重名机制

全局变量 局部变量 块变量允许重名

如果语句中使用重名的变量,实际对应的是离声明语句最近的可用的变量(就近原则)

编程的时候不要使用重名

5.程序在内存/文件中的分段

在这里插入图片描述

(1)代码段(text)

存放程序的语句,该段在程序运行期间大小固定,不能被修改

(2)数据段(data)

所有已初始化的全局变量和静态变量存储在该段落,该段在程序启动时分配空间,在程序运行期间大小不变

(3)bss段

所有未初始化的全局变量和静态变量存储在该段落,该段在程序启动时分配空间,会被系统自动清0,在程序运行期间大小不变

(4)堆(heap)

存放动态内存分配的空间,动态内存由程序员管理的内存

分配动态内存堆空间变大,释放动态内存堆空间变小

(5)栈(stack)

存放的是函数内部的数据(局部变量 形式参数 返回值 块变量),每个函数都在该段有一段私有区域,该段在函数被调用时变大,函数返回时变小

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值