程序员大神教你学C语言编程—变量的作用域和生存期

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

很多小伙伴都老是会碰到疑问,其实还是基础没打扎实,这些题如果你不看答案你能知道多少呢?如果还有很多不知道就证明基础没打扎实,如果你还在入门纠结,如果你还在苦恼怎么入门!小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

变量的作用域和生存期

在前面的几乎所有例子中,我们都是在main函数体的起始位置声明程序的变量,其实可以在程序的任何代码块的起始处定义变量。变量只存在于定义它们的语句块中,它们在声明时创建,系统会为它分配内存,在遇到下一个闭括号时就会被销毁,该变量占用的内存会返还给系统,变量存在的时间称为变量的生存期。变量的作用域是该变量定义的块中以及它所包含的块,在作用域内使用变量是没有问题的,但是如果尝试在变量的作用域外部引用它,编译程序就会报错,因为这个变量在它的作用域之外并不存在。下面我们看一个例子来了解作用域:

我们可以看到count1的作用域在main函数里以及main函数包含的块中,所以我们可以在do while语句里使用count1,但是count2的作用域只存在于do while语句里的块中,count2在循环的每次迭代中都会重建,并初始化为0,自加1后打印出来,它只存在于从声明它的语句到循环的闭括号为止。如果尝试在循环外使用count2,程序就会报错。

我们可以稍微修改下上面的程序,更深入的了解作用域

在同一个块中定义同名变量程序会报错,但是我们在main块和循环块中使用了同名的变量count1,当然这不是一个好的编程习惯,这里只是举个例子,我们可以看到在循环里打印的是循环块里面的count1,因为外层块的变量总是会被本层语句块中的同名变量所掩盖。

我们知道被{}括起来的都叫做语句块,前面不管是在函数中还是在循环中,都是在语句块中定义的变量,这种变量叫自动变量,它只在自己作用域内可见,只能在它的作用域中使用它。还有一种不在任何语句块中定义的变量,叫做全局变量,这种变量在任何地方都是可见的,当程序被分割为多个源代码文件进行编译时,全局变量也是可以从其他源代码文件中引用的。我们可以右键单击编译器右侧文件列表中的Header Files目录,然后选择添加文件到文件夹,在弹出框中输入globalvar.h然后确定,这时我们可以看到在文件列表中新增的头文件,这里根正一下,不是右键点击Header Files目录,而是选中Header Files目录,然后点击编译器左上角的新建文件,然后把新建的文件保存,名为globalvar.h,保存在Header Files目录中

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

我们使用globalvar.h头文件的方式和我们使用C语言提供的头文件stdio.h其实是一样的,只不过我们通常使用#include<头文件>来包含C自带的头文件,而使用#include"头文件"来包含我们自己编写的头文件。我们的一个工程可以包括N多个.c源文件和N多个.h头文件,以及其他的文件,它们分别存放在文件列表的Source Files、Header Files和Other Files中。接下来我们双击打开globalvar.h头文件,我们在里面添加static int globalVar1 = 1;并保存,然后我们回到main.c,写入下面的代码然后运行,可以看到结果:

可以看到我们确实引用到了globalvar.h文件中的globalVar1全局变量,同时我们也使用在本文件中定义的全局变量globalVar2,但是我建议尽量不要使用全局变量。同样我们可以在头文件中定义函数,比如我们在globalvar.h中定义一个PrintGlobalVar函数,

我们可以在main.c函数中调用PrintGlobalVar();我们可以得到和printf("globalVar1 = %d ",globalVar1); 一样的打印结果,虽然我不建议使用全局变量,但是把一个大的程序分割成很多个小文件,然后在文件中定义函数并在其他文件中调用,这种方式却是值得去做的,因为它使程序的结构更加清晰,把很复杂的问题分解成一个个简单的小问题,这也是过程化程序设计的思想,分解的思想。

然后接下来涉及到关键字static,我们知道自动变量(也叫局部变量)的生存期仅从它定义开始,到它所在的块的闭括号}为止,我们可以通过static来改变局部变量的生存周期,我们还是在之前的例子上修改:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

被声明为static的局部变量和全局变量的生存期一样,都是从程序运行时开始,到程序关闭时结束。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等今天就到这里,欲知后事如何且听下回分解(手动滑稽)~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,100评论 1 19
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,190评论 1 44
  • 了解了越多,世界上有与众不同属性的人群非常多,每个人也想展示自己的独特,为了换取一些关注。每个人的欲望也都写在脸上...
    NLF_62阅读 120评论 0 1
  • 看过很多的书,走过很多的路。我,无非就是想把自己变温暖。 爱过一些人,恨过一些人。相爱相杀,无非就是爱自己多过爱那...
    棠梨未果阅读 209评论 0 2