只要你愿意 开始总比放弃好。 Roman.
愿我们都有自己的目标并正在为其不懈努力。
最近学习的小结 算是给愿意重新的自己的一种交代 告别2021.
九、操作符
1、算术操作符:+ - * / %
1)整数相除 输出结果为整数
2)若想输出小数,将其中一个数改成小数
2、移位操作符:<< >>
移动的是二进制位
3、位操作符:&(按位与) |(按位或) ^(按位异或)
移动的是二进制位
4、赋值操作符:= += -= *= /= &= |= ^= >>= <<=
注意区分初始化与赋值
5、单目操作符:与操作数有关,只有一个操作数
!逻辑反操作 -负值 +正值 &取地址 sizeof操作数的类型长度(以字节为单位) ~对一个数的二进制按位取反 --前置后置 ++前置后置 *间接访问操作符(解引用操作符) (类型)强制类型转换
以下为部分解释:
1)! 真假互换
(注:0表示假 非0表示真)
2)- + 正负值
3)sizeof(变量or类型) 表示:变量or类型所占空间大小
注意:sizeof是操作符or运算符,不是函数!
4)-- ++ 注意区分前置与后置
① 前置:先算后使用 (-- ++后的变量值也改变!)
如:int a=9; int b =++a; 则打印时:a先进行++,故a=9+1=10;而后使用,将改变后的值赋值给b,则b=10 故输出a=10 b=10
②后置:先使用后计算
如:int a=9; int b =++a; 则打印时:a先使用,即将未改变的值先赋值给b,故b=9;而后计算,即a++,则a=a++=9+1=10 故输出a=10 b=9
6、 关系操作符:> >= < <= != ==
注意判断相等使用的是 ==
7、逻辑操作符:&&(逻辑与) ||(逻辑或)
1)只关注真假
2)逻辑与运算时,只要一旦出现一个假,后面的运算就会被屏蔽!
8、条件操作符:又叫做三目操作符
exp1?exp2:exp3;(表达式:exp1)
① 含义:若表达式1为真则计算表达式2,否则计算表达式3,计算的是谁谁就是整个表达式的结果
②各表达式可以加上括号 防止优先级引起的问题
9、逗号操作符:exp1,exp2,exp3,...
表达式从左向右依次进行计算,但是整个表达式结果是最后一个表达式结果,各个表达式前后相互影响
10、下标引用【】、函数调用()、结构成员. ->
①【】下标引用操作符 如:arr[5]=9; 【】的操作数是数组名以及下标
②()函数调用符 如:int m=get_max(a,b); ()的操作数是函数名 变量a、b
十、常见关键字
C语言本身就有的,不能自己创建
关键字不能用作变量名
define不是关键字!
1)auto(自动创建和销毁)
局部变量进入范围被创建,出了范围被销毁;
实际上每个局部变量前面都有auto,实际未显示
2)break:
switch语句、循环语句(for、while、do...while)会用到--跳出循环
3)case 用于switch语句
4)char、short、int、long、float、double 类型关键字
5)const修饰变量--常变量
6)continue:只用于循环语句! (注意:与break区分!)
7)default:用于switch语句
8)do :do...while语句
9)else:if...else语句
10)enum 枚举关键字
11)extern 声明外部函数
12)for for循环
13)goto 某种意义上可以实现分支
14)if if条件语句
15)register:寄存器,类似auto
①如:int num=10;表示num在内存中开辟了4字节空间
register int num=20;表示建议将20放到寄存器中,能否放入取决于编译器
②补充存储器:寄存器 高级缓存 内存 硬盘 网盘
寄存器是集成到CPU上的,其空间较小,速度快,造价高
16)return:返回,一般用于函数中
17)signed:有符号的
18)unsigned:无符号的
19)sizeof:计算类型大小
20)static:数据存储类型的指定--静态
可用于修饰变量和函数
1.静态局部变量
①局部变量没有被static修饰时,在函数内1每一次进入范围都是一个创建与销毁的过程,不会保留记忆
②static修饰局部变量后函数内将会保留记忆,局部变量就变成静态局部变量,出了局部范围不会销毁,下一次进入函数依然存在
③static修饰局部变量时,实际改变的是变量的存储位置,本来一个局部变量时存放在栈区的,被static修饰后存放在静态区,从而导致了作用域依旧存在,生命周期没有结束
④静态区中的数据的生命周期和程序生命周期一样,程序结束,静态数据的生命周期也到了
⑤补充:内存(从上到下)
栈区:局部变量、函数参数or形式参数
堆区:动态内存开辟:malloc/ realloc/ calloc/ free等
静态区:静态变量、全局变量 (出了作用域不销毁,保留记忆)
2.静态全局变量:extern可用于声明外部符号
①如:两个源文件中,一个源文件中有 int g_val=2021;另一个源文件想要试用其作为全局变量,则main函数外声明:extern int g_val;(注意有;) 然后就可以在main函数中使用了
②static修饰全局变量后,使用上感觉作用域变小了
③一个全局变量本来是具有外部链接属性的,但是被static修饰后外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用,不能在其他源文件中使用了
3.静态函数
①如:两个源文件中,一个源文件中有 int Add(int x,int y);函数,另一个源文件想要试用其函数,则main函数外声明:extern int Add(int x,int y);(注意有;) 然后就可以在main函数中调用函数了
②在一个源文件中加入static后将不可以在另一个源文件中使用
③static修饰函数的作用:一个函数本来是具有外部链接属性的,但是被static修饰后外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用,不能在其他源文件中使用了
④使用上感觉作用域变小了
⑤作用:static修饰后可以保持一定的权限不被外部源文件使用
⑥static修饰函数无初始化时,自动初始化为0
21)struct :自定义关键字--结构体
22)typedef:类型重命名or类型重定义
①注意:是类型重定义! 相当于别名,一般用于复杂类型简化
②如:typedef unsinged int {}unit; (注意:结尾有;)
表示:将unsigned int类型定义为unit,后期使用时该类型名称直接用uint代替就可
23)union 联合体or共同体
24)void 无类型or空类型
25)volatile 体现C语言段位 Linux会讲到
26)while 循环
十一、#define定义宏和常量
1)#define定义常量
①补充:源文件.c经过 预编译 编译 汇编 链接 运行 才会成为.exe
②如:#define STR "hello" (注意无“=” “;”)
③在预编译阶段就会把所有的STR进行替换
2)#define定义宏
①习惯上,宏名一般大写
②如:定义宏实现两个数求最大数:
#define MAX (x,y) ((x>y)?(x):(y))
注意:此时无返回类型,括号内未声明类型,也没有;
③宏也是在预编译阶段进行处理的
好了 今天的分享结束啦!
part2 over-
“人的一切痛苦,都是来源于对自己无能的愤怒。”
Roman. 2021/12/25