2.初识C语言——5分钟还理解不了变量及相关知识?(上)

本文详细介绍了C语言中的变量相关知识,包括底层概念、作用域、生命周期、分类以及与存储类别的关系。强调了变量的作用域决定了其生命周期,并探讨了静态与动态存储的区别。同时,文章提倡使用anki作为学习工具,以提高学习效率。
摘要由CSDN通过智能技术生成

零、对即将形成的栏目体系及学习路线的说明

本文继上篇博客1.重扬帆,在起航——初识C语言。http://t.csdn.cn/VV9n1后,开始正式的C语言学习。

(上篇内容如下:)
一、自我介绍
二、编程目标
三、如何学习编程
四、每周对编程的精力分配
五、当前最想进入的IT公司


考虑到C语言知识体系庞大、划分方法无统一标准,以及当下碎片化学习等环境因素,每篇博客将仅着重对C语言中某个方面进行分享与请教(giegie喷我)。
考虑到人的认识具有无限性和反复性的特点,每个方面将以知识的深度划分为(上)、(下)篇,甚至还有额外的补充篇,本人能力有限还请谅解。
推荐使用全平台同步的学习应用——anki,这个软件是我整个考研备考以及其他备考、学习围绕的中心,其被禀赋的方法论具有鲜明的时代进步性(可见上一篇简要说明,或关注随时私信讨论),下面贴一张近期anki学习的热图:

在这里插入图片描述


简要讨论一下anki被禀赋的学习方法论与传统学习的对比,未来关于学习本身及其方法论研究方面也会更新博客专门分享与请教:
anki被禀赋的学习方法论 VS 传统学习方法论
1.高自由度地自动安排复习 VS 传统的被动执行计划
2.复习时据具体情况,要求主动思考、回忆 VS 一摞笔记和书——无法精细化的木乃伊型知识
3.知识/技巧/意识/智慧/…能够消化、吸收为自己的 VS 现成的结论、干瘪的教条
4.终身、扩充性强的知识库 VS 碎片化、无法扩充的知识渣儿
……

一、变量相关的底层概念

(一)常量和变量的定义
1.常量:随时间推移不发生改变的量,如π
在这里插入图片描述


2.变量:随时间推移在某时间节点可能发生改变的量,如人的年龄

在这里插入图片描述


(二)标识符——一个对象的名字,如变量名、符号常量名、函数名
组成元素:①字母 ②数字 ③下画线(_)
命名规则:首个字符不可为数字
大小写敏感:√是
最大长度:63个字符
关键字能否作为标识符:×否

二、变量的作用域和生命周期

(一)作用域(scope):变量可使用的范围
1.局部变量的作用域:变量所在的局部范围
2.全局变量的作用域:整个工程
(二)生命周期:变量从创建到销毁的时间段
1.局部变量的生命周期:从进入作用域起,到出作用域结束
2.全局变量的生命周期:整个程序的生命周期
(三)变量的作用域和生命周期的关系:作用域决定了生命周期

三、变量的分类

(一)按变量的作用域分
1.局部变量:程序中只在特定过程或函数中可以访问的变量,包括
  (1)在函数开头定义,如形参
  (2)在函数内部定义,如在函数里面定义的变量
  (3)在函数内部的复合语句定义,如for循环中,花括号内
【注意】
①(1)、(2)定义的变量可以在函数内任何地方使用,而第三种方式定义的变量只能在复合语句内使用
  ②不同函数/同一函数内不同复合语句中,可以使用同名变量,它们表示不同对象,互不干扰
2.全局变量/外部变量:在函数之外定义的变量
  (1)因为每个函数只能返回一个返回值,因此可以通过全局变量来实现一个函数改变多个值后,还能被其他函数调用
  (2)全局变量在整个程序执行过程中都要占用存储单元,使用太多全局变量会占用较大空间
  (3)同名的局部变量和全局变量,局部变量优先

(二)按变量的存储方式分
1.动态存储方式:程序运行期间根据需要进行动态分配的存储方式
  (1)函数结束时自动释放变量在内存中占用的存储空间
  (2)同一个动态变量被定义两次,其存储空间的地址未必相同。第一次调用完后会其释放其占用的内存空间;第二次定义时其占用的内存空间未必同之前一样。因此动态存储的变量定义时如果不初始化,则其值为随机数,无法预知该块儿内存空间存储了什么。
2.静态存储方式:程序运行期间由系统分配固定内存空间的存储方式
  (1)在程序执行的整个过程中都占用着该块儿内存空间,如静态变量定义时不初始化,则其值默认为0或“\0”。

四、变量与存储类别的关系

(一)局部变量与存储类别的关系**
1.自动(局部)变量:(auto) 变量
  局部变量只要不指定其为静态存储类别(用static修饰),就是动态存储类别。因此定义一个自动变量时,可以省略关键字(auto)。
2.静态局部变量:static 变量
  使用关键字static修饰定义的变量,函数调用完不释放其内存空间,在下次调用时保留着上一次被赋的值。使用它可以比较方便地完成一些特定的问题,如计算n!。
  (1)静态局部变量在编译时只执行语句 static int a = 1 ; 一次,而与程序运行期间调用这句代码所在函数多少次无关,前提是定义的同时赋值。相比之下,自动变量每被调用一次就被定义和赋值一次。

【注意】static修饰局部变量,可简单理解为初始化后本语句不再编译但变量还存在,可持续赋值

在这里插入图片描述

左边结果:10个2 ,变量a是自动变量创建10次销毁10次
右边结果:2 3 4 ……11 ,代码运行到test(){}函数外变量a并不销毁

(2)使用静态存储要占较多内存且一定程度上降低程序可读性,别过多使用。
(3)局部变量无extern声明

(二)全局/外部变量与存储类别的关系
1.所有全局变量都是静态变量且都存在内存的静态存储区
2.所有全局变量只要不加static修饰,便都可以使用关键字extern来声明,扩张其作用域从声明处开始,还可以跨源文件声明使用。
3.在全局变量前面加static修饰符,可将外部变量限制在本源文件中,本质是将外部链接属性转为内部链接属性。
4.全局变量和局部变量都只能定义一次,但全局变量可以声明多次而局部变量不能有声明,因为其对应的内存空间不知道在哪(见上)。
5.所谓变量声明的本质,就仅仅是将作用域扩张到声明处以下。

五、总结及留在最后的话

在当今社会内卷与新冠疫情的大环境下,我们只有努力奔跑,才可能留在原地。社会内卷的本质是资本的内生性扩张放缓或遇阻,体现在个人、群体层面表现为竞争加剧。人与人的差距已很大程度上不是由传统教育及我们文化中所过度强调的努力、“淦就完了”主导,而是思想、是方法论、是意识、是智慧、是思辨,因此要着重持续改进的是我们大脑的“操作系统”。(有关内卷,很快我将更新一篇博客来分享和请教)我很愿意和大家一起继续学习、分享、讨论这些意义-乐趣二维中意义成分比较重的内容。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

用哲学编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值