一、常量
1、什么是常量
常量,表示一些固定的数据
2、常量的分类
1> 整型常量(int)
包括了所有的整数,比如6、27、109、256、-10、0、-289等
2> 浮点型常量(float\double)
浮点型常量分为double和float两种数据类型
double:双精度浮点型,其实就是小数。比如5.43、-2.3、0.0等(注意,0.0也算是个小数)
float:单精度浮点型,也是小数,比double的精确程度低,也就是说所能表示的小数位数比较少。为了跟double区分开来,float 型数据都是以f结尾的,比如5.43f、-2.3f、0.0f。需要注意的是,绝对不能有10f这样格式的,编译器会直接报错,只有小数才允许加上f。
3> 字符常量(char)
将一个数字(0~9)、英文字母(a~z、A~Z)或者 其他符号(+、-、!、?等)用单引号括起来,这样构成的就是字符常量。比如'6'、'a'、'F'、'+'、'$'等。
注意:单引号只能括住1个字符,而且不能是中文字符,下面的写法是错误的:'abc'、'123456'、'男'
4> 字符串常量
将一个或者多个字符用双引号("")括起来,这样构成的就是字符串常量。比如"6"、"男"、"哇哈哈"、"abcd"、"my_car4",其实printf("Hello World");语句中的"Hello World"就是字符串常量。
二、变量
1、变量的命名规则:
变量名只可以由字母、数字、下滑线组成,除此之外不能包含其它特殊字符(如:控制字符、特殊符号等);
变量名必须以字母或者下划线开头;
C语言中的保留字具有特殊意义,不能用作变量名称;
C语言的变量名称区分大小写,例如:变量A与变量a是两个不同的变量。
2、变量的作用域:
每个变量都有其有效的使用范围,在有效范围内,可以对变量进行访问,而超过了变量声明的有效范围,该变量就无法访问了。
变量按照其作用域划分:
- 局部变量:只能在函数内(以函数{ }括起的范围内)或者语句块内(条件、循环{ }括起的范围内)使用的变量,一旦超出了其定义的花括号范围即不可访问。
1 void func()
2 {
3 float f_val; //局部变量f_val,在函数func()内部任何位置始终有效
4 …
5 }
- 全局变量:可以在整个程序任意位置使用的变量。
1 float f_val; //全局变量f_val,在程序文件中任何函数中都可以使用
2
3 int main(int argc, const char * argv[]) { … }
4
5 void func() { … }
- 不管是全局变量、局部变量,只要在其声明范围内的各个位置都可以访问使用;一旦超过其声明范围,到更大的作用域范围中,就不可访问使用了。
注释:局部变量在内存中存储与堆栈中,所有static关键字修饰过的变量存于普通内存中。Static修饰全局变量,此变量被私有化,只在其所在的源文件中可用;static修饰过的局部变量仍是局部变量,只是生命周期变长了;static修饰过的函数,此函数被私有化,只在其所在的源文件中可用。
3、变量的存储类型:
变量的存储方式分为动态、静态;动态存储变量时而存在时而消失,而静态存储变量在其生存期作用域范围内一直存在。
- auto存储类型:自动变量,局部变量缺省(默认)情况下是此类型变量;
- register存储类型:寄存器变量,存放于CPU寄存器中,对于循环次数较多的情况下,可以将控制循环次数的计数器变量定义为此类型变量;
- static存储类型:静态变量,只要程序运行时,在变量的作用范围内就可以一直访问使用该变量;
- extern存储类型:外部变量,作用域是整个应用程序,可以在多个源文件中使用该变量;
注意:静态局部变量的作用域以及生存期:⬇️
- 静态局部变量的作用域是其声明的局部范围内;
- 静态局部变量的生存期是整个应用程序运行期间;
- 虽然作用域为局部范围内,超出了作用域就不可访问了,但是其生存期是整个应用程序运行期间,只要进入静态局部变量的作用域,该变量又可以被访问了,而且其值保留前次被使用的结果;
注释:register 只修饰局部变量(只能是int类型、char类型、指针类型);不能修饰全局变量和static修饰过的局部变量。
auto是专门修饰局部变量的。
extern是修饰全局变量的,或在函数中做引用外部全局变量使用。