IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 初入C语言(下) -> 正文阅读

[C++知识库]初入C语言(下)

变量的作用域和生命周期

(一)变量在作用域范围上又分为局部变量和全局变量。

例如:

int a = 0;//全局变量:在函数外定义的变量

int main()
{
    int b = 0;//局部变量:定义在函数中的变量
    return 0;
}

全局变量作用域范围是整个工程,局部变量的作用域范围是定义的变量所属的区块范围内。通俗来讲,作用域范围指的是作用在哪块区域是有效的。全局变量在整个工程中都可以使用,而局部变量只可以在定义的区域内使用,在哪个大括号内定义的局部变量,只可以在哪个大括号内使用。为什么会有这种限制,这就需要说道另一个名词:生命周期。

不管是全局变量还是局部变量都存在生命周期。生命周期就是诞生到消亡的时间段,全局变量的生命周期就是从它创建开始到整个工程结束。局部变量的生命周期就是进入作用域时开始,出去作用域时结束。换言之,局部变量的生命周期就是定义它的左大括号开始到右大括号结束,括号内就是它的生命周期,局部变量出大括号就会销毁。

(二)变量中还有一种特殊存在,就是常变量。

常变量本身的属性是变量,但是不可以通过变量名进行修改。

例如:

int main()
{
    const int n = 1;//常变量:用const修饰的变量
    n = 2;//错误行为,n为常变量是不可以作为左值被赋值

    return 0;
}

n作为常变量不可以在初始化后被赋值,就像程序中不可以将常量赋值给另一个常量一样。

(三)被static修饰的变量

被static修饰的变量又分为静态局部变量和静态全局变量。

(1)静态局部变量:被static修饰的局部变量

例如:

#include<stdio.h>
void print()
{
    static int i = 0;
    i++;

    printf("%d ", i);
}

int main()
{
    int i = 0;
    for(i = 0; i < 6; i++)
    {
        print();
    }
    
    return 0;
}

输出结果为:1 2 3 4 5 6

静态局部变量的生命周期延长为整个工程,作用域范围不变。当局部变量被static修饰后,局部变量的存储区域发生了变化,从由栈区存储变化为由静态区存储,静态区储存全局变量和静态变量。本质上,由于存储方式发生了变化,导致变量的生命周期的变化。
?

(2)静态全局变量:被static修饰的全局变量

例如:

//例子1
    //tset1.c
int goal = 10;

    //test2.c
#include<stdio.h>
int main()
{
    printf("%d\n", goal);
    return 0;
}


//例子2
    //tset1.c
static int goal = 10;

    //test2.c
#include<stdio.h>
int main()
{
    printf("%d\n", goal);
    return 0;
}  

两串代码的输出结果:例子1可以正常输出,例子2出现报错。这是因为static修饰全局变量会将全局变量的作用域发生改变,由整个工程使用变为只能在定义变量的源文件内使用。本质上是改变了全局变量的链接属性,将其外部链接属性变为内部链接属性。

如有不当之处,感谢大佬指正。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:13:43  更:2022-10-17 12:16:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 2:49:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码