C语言#初识C语言(三)
1、操作符
2、常见关键词
3、指针
1、操作符
sizeof 操作数的类型长度
~ 对一个数的二进制按位取反
在二进制中1代表负,0代表正。
有符号的整形的二进制数的第一位是符号位,即+或-。
整数在内存中存储的都是补码。
原码是直接按照正负写出来的二进制序列
反码是原码的符号位不变,其他位取反得出的
补码是反码+1得到的。
正数的原码、反码、补码都相同
负数想要输出原码,需要由补码-1的到反码,反码除符号位其他位取反得到原码。
--前置、后置--
++前置、后置++
(类型)强制类型转换
关系操作符
>,>=,<,<=,!=,==,
!=用于测试不相等
==用于测试相等
逻辑操作符
在C语言中,0代表假,非0代表真。
&& 逻辑与
&&逻辑与的意思是:a是非0数吗?b也是非0数吗?如果都是非0数,输出1。如果某一方是0,那么输出0。
|| 逻辑或
||逻辑或的意思是:a和b两方中任意一方是非0数,就输出1。两方都是0,输出0。
条件操作符
exp1?exp2:exp3
这个操作符是一个三目操作符
逗号表达式
exp1,exp2,exp3,…expN,
由逗号隔开的一串表达式就是表达式。
下标引用、函数调用和结构成员
[],(),·,->,
2、常见关键字
auto,break,case,char,const,continue,default,do,double,else,enum,extren,float,for,goto,if,int,long,register,teturn,short,signed,sizeof,static,struct,switch,stypedef,union,unsigned,void,volatile,while,
注:自定义变量名不可以和关键字相同
atuo 自动变量
当a在大括号中时生效,离开大括号时失效。所以在每个自动变量前都有一个auto表示这个局部变量是个自动变量,但是每个局部变量都有一个auto,所以就省略不显示了。
register 寄存器变量
register是用来向寄存器建议让此变量放在寄存器中,方便我们更快的调用这个变量。但是register是向寄存器建议,因为需要快速调用的变量太多了,需要有寄存器判断是否要放大寄存器中。
signed 定义有符号的变量
unsigned 定义无符号的变量
signed可以输出正数或负数
unsigned只可以输出正数
typedef 类型重定义
类型重定义,说直白点就是类型增加了一个别名。使名字较长的类型拥有一个名字较小的别用,使我们调用它更方便快捷。
static 静态
extern 声明外部函数
static 修饰局部变量
此代码的运算思路:首先在循环中判断a是否小于5,小于5时,进入test中。test中b=1生效,b+1,然后输出b。然后a+1,a变成1。继续重复在循环中判判断。但是在test中int a=1使用了static,使a的生命周期延长,当a离开大括号时将会继续保留,也就是当第二次循环开始a就变成了2。
改变了局部变量的生命周期,使生命周期延长,出了他的作用域也不会被销毁。
static 修饰全局变量
改变了全局变量的作用域,使得全局变量只能在自己的源文件中使用。
static改变函数的链接属性
使用static使函数的链接属性由外部链接变成了内部链接,所以函数只能在自己的源文件中使用。
#define定义了常量和宏
#define定义了标识符常量
#define 定义了宏-带参数
注:使用宏时,宏名一般都是大写
3、指针
&取地址
*定义指针变量和解引用
指针变量是用来存放内存地址的
指针的类型需要和取地址的变量的类型相同
此代码计算思路:首先a在内存中拥有了一个位置,并且拥有了专属的地址。在这个地方中存放了数字10。其次p也在内存中拥有了一个位置,但是使用*,所以这个地方只能用来存放地址信息并且存放了a的地址信息。再次使用*在p的里面进行解引用,意思是数字20通过p中存放的a的地址信息,进入a的位置里,替换了10。
指针的大小
指针大小在32位平台是4个字节,64位平台是8个字节。