变量
- 什么是变量?
变量是程序可操作存储区的名称,通常该存储区是内存,变量就是内存中一块空间的标识。 变量具有有类型,而变量的类型决定占用内存空间的大小。
变量的命名规:由字母,数字,下划线("_"),组成的序列,第一个字符必须为字母或下划线。
- 变量的基本类型
char 字符型 int 整型 float 单精度浮点 double 双精度浮点
使用 sizeof 查看占用存储大小
#include <stdio.h> int main () { int i; printf("字符型所占存储空间为: %d 字节\n", sizeof(char)); printf("整型所占存储空间为: %d 字节\n", sizeof(i)); return 0; }
- 变量的声明
C语言中所有变量都必须先声明后使用。一次可以声明多个变量,也可拆开分别声明,声明的同时也可初始化。
int a, b, c; int d = 10; char f;
全局变量和局部变量
- 全局变量
全局变量也叫外部变量,是在函数体外定义的。
全局变量又分 外部全局变量,静态全局变量。
使用 static 存储类型的全局变量只能在被定义的源程序文件中使用
使用 extern 存储类型的全局变量不仅能在被定义的源程序文件中使用,还可以被其他源文件中的函数引用。
#include <stdio.h> int a = 16; void print() { printf("全局变量 a = %d \n", a); } int main() { print(); return 0; }
example-1
如果 print 函数定义在 全局变量的前面,就需要加上一句 extern int a,否则会报错,具体如下。
#include <stdio.h> void print() { extern int a; printf("全局变量 a = %d \n", a); } int a = 16; int main() { print(); return 0; }
example-2
- 局部变量
局部变量,是在函数中定义的,形参也是局部变量。
注意局部变量的作用域仅在定义该变量的函数内,如全局变量和局部变量同名,在局部变量作用域(该函数)内,局部变量覆盖全局变量。
#include <stdio.h> int a = 16; int main() { int a = 3; printf("a 的值为 %d \n", a); return 0; }
生存周期和作用域
所谓的生存周期,是指变量占用内存或者寄存器的时长。根据变量的存储类型的不同,在编译的时候,变量将被存在动态存储区或静态存储区中,其生存周期是由声明时的存储类型所决定的。
静态存储区:存放全局变量和静态变量,在执行程序前分配存储空间,占用固定的存储单元
动态存储区:存放的是函数中的局部变量,函数的返回值,形参等,它在函数被执行的过程中进行动态分配,在执行完该函数时自动释放。由于这种机制,前后调用同一个函数,其临时变量分配到的地址可能不同。
存储类型
auto
非静态变量的局部变量为 auto 变量。在函数内不加 atuo 说明存储类型的变量,视为 auto 类型。
register
register 存储类型用于定义存储在寄存器中的局部变量,使用 register 存储类型是为了提高执行效率。
注意:因为寄存器的数目有限,故不能大量使用 register 。即使用了 register ,也并不意味着变量一定将被存储在寄存器中,取决于硬件和实现的限制。
static
static(静态)变量,它的生存周期是从程序开始运行到程序运行结束,属于静态存储区。
静态全局变量,它只能在被定义的源程序文件中使用,不能别其它源程序文件中的函数调用。
静态局部变量,它的生存周期虽然是从程序开始运行到程序运行结束,但是它的作用域仅在定义它的函数内。
静态局部变量是在它所在函数被执行时初始化,之后再执行该函数时,静态局部变量将不再初始化,而是保留上一次的值。
extern
外部存储类型,extern 类型的全局变量,不仅能在被定义的源程序文件中使用,还可以被其他源文件中的函数引用。如全局变量没有指定存储类型,则默认为 extern 类型。
常量
常量是固定的值,在程序执行期间不会改变。
算数运算符
+ 加 - 减 * 乘 / 除 % 取余 ++ 自增 -- 自减
注意:自增和自减,a++ 表示先操作后自加1,++a表示先自加后操作,自减同理。单目运算优先级大于双目运算。
关系运算符
> 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于
逻辑运算符
&& || !
赋值运算符
=
将右边的值赋给左边
i = i + 3 等价于 i += 3 算数运算符均可这么玩
优先级
简单记
! > 算术运算符 > 关系运算符 > 逻辑运算符(!除外) > 赋值运算符
ps:重点在前部分 O(∩_∩)O~~