常量和变量
什么是常量?常量是在程序运行过程中不变的量
那什么是变量呢?就是在程序运行过程中会改变的量
C语言中定义数组的大小的时候必须使用常量
这个时候n不可以改变,但是n的本质还是变量,所以在这里依然报错
那么应该如何定义常量呢?
方法一:使用#define来定义常量
这里写SIZE和写10是等价的,此时的SIZE就是一个常量
方法2:枚举常量
scanf和printf
scanf的作用是输入数据,输入的数据从键盘读取到内存中
printf的作用是输出数据,输出的数据从内存里面打印到屏幕上面
定义变量的本质:在内存中开辟一块空间,存放数据
变量使用完之后会销毁:内存释放,还给操作系统
字符串
字符串以\0结尾;printf("%s", ch)的时候,遇到%s的时候才会停止
strlen函数是用来求字符串长度的,从首地址开始一直读取到\0结束,\0不计入在字符串长度里面
转义字符
掌握两个重要的:
\ddd:1到3位八进制数所代表的任意字符
\xdd:其中的两个d都是16进制的数
转义
\x11算一个字符,\32算一个字符,因为八进制里面最大的数字不能大于8,所以\328算两个字符
操作符
(只讲解部分)
%:只使用于两个整数做运算
<< >>:移位的是二进制
按位与(&):在两个数的二进制中,相对应的数的二进制位要同时为1,&后才能为1
按位或(|):同&情况差不多,不过他只要有一个为1,|之后就为1
按位异或(^):在两个数的二进制中,相对应的位^后,如果这两位相同则为0,不同则为1
按位取反(~):将一个数的二进制表达中所有的1变成0,所有的0变成1
逗号运算符(,):
逗号运算符只将最后括号里面最后一个数返回,但也要计算在这个括号里面前面的位置会不会出现某个变量值改变的情况
C语言中的常见关键字
register
作用:用register关键字修饰变量,就是希望编译程序时能把该变量放到寄存器(只是希望编译的时候放到寄存器里面,不是强制性的,实际上有可能不会放),这样可以提高对该变量的访问速度。CPU访问寄存器的速度高于访问内存的速度
应用场景:当一个变量被频繁调用的时候,可以用register去修饰变量
注意事项:因为register变量可能不存放在内存里面,所以不能用“&”来获取register变量的地址。用register修饰的变量不一定存储在寄存器里面
局部静态变量不能定义为寄存器变量。可能原因:局部静态变量的生命周期和整个程序的生命周期是一样的,总不能分配一个寄存器一直被一个变量所占用。寄存器资源很宝贵
不能定义任意多个寄存器变量。register修饰的变量都不一定放到寄存器里面,可见寄存器资源非常宝贵
static
1. static修饰的静态局部变量
static修饰局部变量的时候,会影响局部变量的生命周期,本质上改变了局部变量的存储位置,生命周期边长,为整个周期
2. static修饰全局变量
我们知道,当需要调用另一个文件中的全部变量的时候(加入这个变量是g_val),则我们需要先在这个文件中写extern int g_val,但是如果这个变量加上了static修饰,这个变量就只能在自己的文件里面使用,相当于缩小了该变量的使用范围
3. static修饰函数
和修饰全局变量有类似的效果,被修饰的这个函数只能在本文件中使用
内存
内存一共有三大区域:栈区,堆区,静态区
全局变量位置是固定。局部变量在栈区,这个局部变量在被多次调用的时候,每次调用这个局部变量在栈上面的位置都不一定相同