写在前言:
本文将粗略介绍变量的作用域与生命周期,常量,字符串,等内容。
变量的作用域与生命周期:
变量的作用域指的是变量所作用的范围,即限定这个变量的可用性的代码范围。而局部变量的作用域即为变量所在的局部范围,请看下图:
此处的a在main函数的函数体内创建,即a只能在这个大括号中使用。
这两张图也是同一个道理,只能在自己限定的范围内使用。
对于全局变量而言,其作用域为整个工程,在任何一处都能使用,请看下图:
可以看到,此处程序没有报错,说明变量a在任何一处都能使用。
常量的分类
c语言的常量又分为以下几种:
字面常量
const 修饰的常变量
#define 定义的标识符常量
枚举常量
对于字面常量而言,就是我们经常所说的,1,2,3,A,B,C这类数字与字母
const修饰的常变量
对于const修饰的变量,我们说其具有常量属性,但其却任然是个变量,也即是变量,但又不完全是,为什么说其具有变量属性呢,请看下图:
const修饰的变量a无法被修改,而编译程序的时候编译器也会报错,即具有常量属性,对于变量属性,请看下图
我们可以看到,编译程序的时候1代码是跑不过去的,由于vs2019不支持延长数组的语法,因此1处代码无法跑过,而2处的代码可以正常运行,这也说明了const修饰的常变量具有变量的属性。
#define 定义的标识符常量
#define定义的标识符常量一般会放在头文件或者是程序的开头,输入格式为:
即#define 变量名 赋值
而它也是彻彻底底的常量,在定义数组时也可以使用,请看下图:
编译程序的时候是肯定没有错误的。
枚举常量
枚举常量需要首先创建枚举类型,这个时候就需要用到关键字enum,用enum来创建枚举类型,比如说,我们要创建性别类型,用以下的代码来实现
要注意的是,此处的MALE语句结束后不用加分号,而是加的逗号,在最后的SECRET语句后方也不加分号。
当我们创建好枚举类型之后,我们就可以来打印出枚举常量的值
请看下图:
此处的MALE赋值给了变量S,而MALE的值其实是0,我们可以将其打印出:
若打印出FEMALE,与SECRET的值,则其它们的值分别为1,2,大家可以试一试。
字符串与转义字符与注释
“HELLO,WORLD”,对于这种由双引号引出来的字符我们称其为字符串,而最重要的一点是,字符串的结束标志为’\0‘,请看以下程序:
咋一看arr1与arr2是相同的,但真的是相同的吗,我们看一下程序的结果:
2号代码打印出了乱码,这是为什么呢,我们可以打开调试窗口来看一下不同。
发现arr1数组比arr2数组多出了一个’\0'字符,哟啊是我们在arr2数组加上'\0',此时打印的结果为
结论,'\0'为字符串结束标志,字符串的结尾会自动加上‘\0’来结束字符串,printf与strlen函数在读取字符串时以‘\0'作为结束标志,但’\0'不会被读取.也即strlen(”abc“)的字符串长度为3.
关于注释,有两种注释方式,对于c语言的注释来说,我们一般用/**/来注释,请看下图
但这种方法有个弊端,即无法嵌套注释,
此处的编译器就报了错误。
第二种注释方式为在语句前加两个//,这种方式快捷实用.
vs可以直接对选中的语句全部注释.
转义字符:
如果我们要在屏幕上打印 c:\code\test.c,是不可以直接输入这段字符串来输出,请看下图
此处的\t被转义为水平制表符,类似的,还有以下转义字符:
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\' 用于表示字符常量'
\“ 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130
\xdd dd表示2个十六进制数字。 如: \x30 0
其中,要着重介绍的为\ddd,与\xdd,上面已经描述\130,其实\130为八进制数字,其代表的转义字符为其十进制所对应的ASCII码表的字符,请看下图:
在strlen求字符串长度时,要尤为记得’\ddd'中的数字不能超过8,要是超过8,会以另外一种方式计算。如下图
箭头所指的\628中,\62被解析成一个转义字符,因此\628的字符串长度计算为2.
函数:
函数,将一个一个的功能独立开来,例如我们在求两个数最大值时,就可以写函数来实现,以后要进行比较的时候直接进行调用就可以。如下图求两个数较大值的函数
数组
数组,是用来存储相同元素的一个集合,首先,介绍的是其如何定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10};这一句代码即为定义数组,其中int指的是数组中存放数据的类型,[10]指的是数组中最多存储10个元素。
int arr[] = {1,2,3,4,5,6,7,8,9,10};这句代码中也可以将[10]中的10去掉,此时数组中存储元素的个数即为初始化的个数。
若不对数组初始化,则arr[]中必须放置所需数字。
要注意的是,若对数组不完全初始化,数组其他元素默认初始化为0,如下图
此处数组只对第一个元素初始化为0.
数组的下标从0开始,即如果要访问数组中的元素,应该通过下标来访问,如下图
本文完。