“初始C语言“(part 2)

只要你愿意 开始总比放弃好。     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

   

上一篇:如何获取重载函数的地址 - 回复 "flq_00000" 的问题


下一篇:C语言中函数指针和回调函数的详解