操作符+关键字
局部变量与全局变量一起出现时,局部变量优先 “就近原则”
一、操作符
(1).sizeof
(2).~
b有符号,则第一位为符号位,1负0正
原码符号位不变,其他位按位取反得到反码,反码+1变补码
只要是整数,内存中存储的都是二进制的补码
正数——原码,反码,补码 相同
负数——
原码直接按照正负写出的二进制序列
反码—原码的符号位不变,其他位按位取反得到
补码—反码加一
(3).——/++
int a=10;
int b=a++;(a=11,b=10)
int b=++a;(a=11,b=11)
(4).(类型)
2.关系操作符
3.逻辑操作符
此时c=0
4.条件操作符/三目操作符
表达式1为真,表达式2执行,表达式2的结果是整个表达式的结果
表达式1为假,表达式3执行,表达式3的结果是整个表达式的结果
5.逗号表达式
exp1,exp2,exp3....expn
6.下标引用,函数调用和结构成员
二、常见关键字
1.auto
2.extern 引入外部符号
3.register 寄存器
自下而上访问速度越来越快,所占空间越来越小
b
随着cpu的处理速度越来越块,从内存中读取数据依然不能满足它的处理速度,则转而从寄存器中读取,因此写代码时可以将重要变量存储在register中,此时只是建议编译器存储变量在寄存器中,是否真正存储,需要编译器自主判断
4.signed
int 定义的变量是有符号的 全称为 signed int
unsigned为无符号的
5.struct 结构体关键字
6.union 联合体/共用体
7.typedef 类型定义—类型重定义
8.static—静态全局变量
(1)static修饰局部变量
局部变量生命周期延长
(2)static还可修饰全局变量,
变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法再使用了
eg.在add.c源文件中定义
在test.c 文件中可以调用
BUT!
若改为
则无法调用
tips
输出的结果是 2 2 2 2 2
因为a是局部变量,因此一出代码块,属于a的内存就被释放,再次回到代码块时,a的值仍为1
(3)static可修饰函数
改变了函数的外部链接属性,具有内部链接性,仍不能处于另一个源文件被调用
函数本身具有外部链接属性
三、#define定义常量和宏
四、指针
1.内存
每一个内存块对应一个编号,即地址
如果一个空间为一个bit,32位机器最多访问0.5gb
如果一个空间为一个byte,32位机器最多访问0.5*8gb
p里面存的是a的地址,它的变量类型是 int*
2.指针变量的大小
32位机器上地址为32位的二进制序列,即32bit=4byte
64位机器上地址为64位的二进制序列,即64bit=8byte
即指针的大小为4个字节/8个字节