一. 操作符
移位操作符--移动二进制的位 << >>
复合赋值符
a += 3 -= *= /= &= ……
- 单目操作符
! 逻辑反操作 -----0为假 非0为真
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度 以字节为单位
~ 对一个数的二进制按位取反
* 间接访问操作符
-- 前置 后置
++ 前置 后置
++a // a++
前置++ 先加1,后使用 后置++ 先使用,后加1
强制类型转换
int a = (int)3.14
逻辑操作符
&& 与 || 或
三目操作符
(a >b ) ? (a) :(b) 真为a 假为b
逗号表达式
从左向右依次计算
exp1,exp2,exp3,
二. 关键字
常见关键字
---预设好的 不能自己创造 变量的名字不能是关键字
类型有关 auto char const double enum
float int long register short
signed sizeof static struct
typedef union unsigned void
控制逻辑 break continue case default do
else if for goto return while switch
申明外部符号 extern
volatile const
typedof 类型定义(重命名)
typedef unsigned int uint; int main(){ unsigned int num1 = 0 ; uint num2 = 0; return 0; }
// 可以让复杂的类型简单化
//num1 num2 是同一种类型的变量
static 修饰变量和函数
修饰局部变量 (进入函数创建 出了函数销毁(空间还给操作系统))
void test() { int a = 2; a++; printf("%d\n", a); } int main() { int i = 0; while (i < 5) { test(); i++; } return 0; }
输出 3\n3\n3\n3\n3\n
加上static之后
//static 修饰局部变量 使得局部变量出了作用域并不销毁,下一次进入函数,依然使用的是上次留下的值
//如果反复调用函数,产生累计的效果
//本质上:static修饰局部变量使得变量的存储位置发生变化
//本来局部变量是放在栈区,被static修饰后,放在内存的静态区,感觉是生命周期变长
//作用域没有变化
void test() { static int a = 2; a++; printf("%d\n", a); } int main() { int i = 0; while (i < 5) { test(); i++; } return 0; }
输出 3\n4\n5\n6\n7\n
编译器在编译的时候
是每个.c文件单独编译的 (链接)
解决方法: (声明外部符号) extern int g_val
修饰全局变量
static 修饰全局变量后,使得这个全局变量只能在自己所在的源文件内部使用
其他源文件无法使用
本来一个全局变量是具有外部链接属性的,只要合理的声明,全局变量在其他源文件内部,可以使用
而被static 修饰后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用了
修饰函数
两个头文件
加上static就不能调用了
//本来函数是具有外部链接属性的
//在其他源文件内部可以被调用
//被static修饰之后外部链接属性就变成了内部链接属性
//就只能由自己所在的源文件内部使用
register 寄存器关键字
电脑上有存储设备 寄存器 4字节 几十个
内存 8G/6G/32G
硬盘 500G/1T
(网盘) 1T/2T 免费
register int a = 10; 建议性关键字 (建议a放在寄存器中)--最后由编译器来界定是否
放入
因为多次调用a 寄存器里反应更快