数据类型
C语言是一种强类型语言,所有的变量在使用之前必须定义或声明,所有的变量必须具有确定的数据类型。
数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。常用的数据类型有:
数据类型 | 说明 | 64位下的长度 |
---|---|---|
void | 空类型 | 1B |
char | 字符类型 | 1B |
short | 短类型 | 2B |
int | 整型类型 | 4B |
long | 长整型 | 4B |
float | 单精度类型 | 4B |
double | 双精度类型 | 8B |
数据类型详情请跳转C语言之数据类型。
变量
定义形式:<类型名称> <变量名称>
;
作用:变量是一个保存数据的地方,当我们需要在程序中保存数据时,此时就需要一个变量来保存它。
变量名称:其作用是用来识别多个变量。基本规则:
- 由字母、数字和下划线组成;
- 不能以数字开头
- 不可以使用标识符
标识符
标识符表示C语言中已经预定的字符串,用来表示特殊含义,如int
表示数据类型、if
表示判断等,因此这些标识符在C语言编程中不能作为变量名。常见的标识符有:
auto
、break
、case
、char
、const
、continue
、default
、do
、double
、else
、enum
、extern
...
赋值和初始化
在编程语言中,=
表示赋值运算符,含义是=
右边的值赋给左边的变量。
int a = 0;
初始化形式:<类型名称> <变量名称> = <初始值>;
作用:当赋值发生在定义变量的时候,即变量的初始化。如果在使用之前没有进行初始化,有可能会报错,也有可能会出现奇怪的结果。
变量类型
C语言中的变量类型有两种:全局变量和局部变量。
全局变量
定义:在函数外声明的变量。
作用域:同一文件中的所有函数均可以访问。
生存期:从进入程序到程序退出。
未初始化:未初始化的全局变量会得到0
值,指针类型的全局变量得到NULL
。
初始化时期:初始化发生在main
函数执行之前;初始化时只能使用编译时刻已知的值来初始化全局变量。
外部变量:外部变量与全局变量相似,不过其是大文件结构中的一种变量,并且其作用域是整个项目。
外部变量声明的关键字:extern
。
xxx.c文件
int global = 12;
xxx.h文件
extern int global;
注意:
1. 不要使用全局变量在函数间传递参数和结果。
2. 尽量避免使用全局变量。
3. 要区分外部变量和全局变量。【外部变量属于特殊的全局变量】
局部变量/本地变量
定义:在函数内声明的变量。
作用域:只有函数内可以访问。【函数内】
生存期:从进入函数到函数退出。【函数内】
未初始化:初始化的局部变量的值为任意值。
初始化时期:初始化发生在进入函数时。
静态局部变量:在局部变量定义时加上static
修饰符。
1. 静态局部变量初始化只会在第一次进入这个函数时发生,以后进入函数时会保持上次离开时值。
2. 当函数离开时,静态局部变量会继续存在并保存。
3. 静态局部变量实际上是特殊的全局变量,因为它们位于相同的内存区域;静态局部变量具有全局的生存期,但是作用域是函数内(定义的函数内)。
外部变量 VS 全局变量 VS 局部变量 VS 静态局部变量
外部变量 | 全局变量 | 局部变量 | 静态局部变量 | |
---|---|---|---|---|
作用域 | 同一项目中的所有函数均可以访问 | 同一文件中的所有函数均可以访问 | 函数内可以访问 | 函数内可以访问 |
生存期 | 创建:进入程序 销毁:退出程序 |
创建:进入程序 销毁:退出程序 |
创建:进入函数 销毁:退出函数 |
创建:进入函数 销毁:退出程序 |
声明的位置 | 函数外 并通过 extern 声明 |
函数外 | 函数内 | 函数内 |
初始化 | 0或NULL | 0或NULL | 未知 | 0或NULL |
- 函数内声明了与全局变量同名的局部变量时,则全局变量会被隐藏。
常量
定义方式:const <数据类型> <常量名> = <常量值>
const
属性表示该变量的值一旦初始化后,不能修改,即变成常量。
作用:替换C89的直接量,这样修改的时候比较容易。
注意:
- 常量的声明和赋值不能分开,否则会报错。
表达式
含义:表达式是一系列运算符和算子的组合,用来计算一个值。
total = 1;
count = count + 1;
组成:
- 运算符:是指进行运算的操作符,例如
+
、-
等。
优先级 | 运算符 | 结合性 |
---|---|---|
1 | () |
从左到右 |
2 | ! + - ++ -- |
从右到左 |
3 | * / % |
从左到右 |
4 | + - |
从左到右 |
5 | < <= > >= |
从左到右 |
6 | == != |
从左到右 |
7 | && |
从左到右 |
8 | || |
从左到右 |
9 | 条件 ? 内容1 : 内容2 |
从右到左 |
10 | = += -= *= /= %= |
从右到左 |
11 | 表达式1, 表达式2, 表达式3 |
从左到右 |
注意
- 赋值是一个运算符,有结果。例如
a=6的值为6
。 - 不要写复杂的赋值运算。
- 可以使用
()
明确运算符的优先级,防止出错。
- 算子:是指参与运算的值,该值可以是常量、变量或方法的返回值。
输入&输出
输出——printf()
含义:格式化输出(print format)
输入——scanf()
含义:格式化输入(scan format)
注意:scanf中需要变量的地址。格式化输入的信息在真正输入的时候需要全部输入。
// 程序
scanf("%d %d");
// 输入时需要:数字 空格 数字
scanf("%d,%d");
// 输入时需要:数字 逗号 数字
scanf()函数的输入是以行为单位进行的,行的结束标志为回车键。