程序员大神教你学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++能做的

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

你可能感兴趣的:(程序员大神教你学C语言编程—变量的作用域和生存期)