今天我们学习的是变量的作用域和声明周期,常量以及字符串和转义字符。
一般来说,一个程序中所用到的名字并不是总是有效的,而限定这个名字的可用性代码范围就是和这个名字的作用域,这就是变量的作用域。在我看来的理解就是说这个变量能管辖到的范围。通常来说,局部变量的作用域是变量所在的局部范围,而全局变量的作用域而是整个工程。
比如这里有一段简单的代码很好的说明了局部变量和全局变量作用域的例子。
首先我们先定义好主函数main(),在下面的大括号{}中写到定义a=10,在大括号{}的外面我们输出这个a,结果会报错,为什么呢?原因是因为在大括号{}里定义的a,这里是局部变量,而局部变量的作用域只是局部,在大括号外面便不属于这个局部了,此时再输出a,系统并不认识这个未被定义的a。那怎么办才可以输出a呢,我们可以在最上面定义,此时就相当于在全局定义变量,这时候的a属于全局变量,作用域是全局,或者将printf函数也写在大括号的里面。
常量:常量很好理解,我们从小学数学就开始学常量,比如1,2,3都是常量,在C语言中也是一样,具有常属性
常用的常量除了1,2,3,还有被const定义的常量,什么是被const定义的常量呢?比如一个a=10,这就是一个变量,但当我们定义const a=10,这a就是一个常量。
还有一种常量是被define定义的常量,当我们define定义一个常量后,比如define a 10;此时a的值就被定义为10了不能再被改变。
值得一提的是有一类常量叫做枚举常量,这里介绍一个函数enum,这个函数是一个枚举函数,enum函数的用法很简单,如图所示,enum{};里面不同的单位用逗号“,”隔开,指的是在enum函数中的单位从0开始,一直往上加。而图中定义了性别Sex,MALE=3,所以第一个单位MALE会从3开始,逐步往上加,所以输出的就是3,4,5。
字符串:在定义数组arr[]中,定义了一个字符串'abc',和定义三个字符'a''b''c',虽然输出的都是abc,但是其意义是不一样的,在字符串'abc'中隐含了一个\0,这是什么意思呢?\0是一个结束字符,是指输出字符串abc时,计算机会继续往下输出,直到看到\0,才停止输出,而字符'a''b''c'则不需要。
在使用strlen(strlen函数需要引用头文件<string.h>)函数计算表格长度的时候,\0是不需要计算到其中去的。
相似的还有这些
这里我们看printf("%d",strlen("c:\test\328\text.c"));中计算c:\test\328\text.c的字符长度,答案是14,第一次我也错了,为什么呢?这里注意\t是属于一个字符,\32算一个,为什么8不用算呢,因为\xdd的意思在八进制中,8不算,所以8算一个,一共就是14个。
今天的博客就到这里,下次我们再见面。