操作符
SIZE OF
求一个变量或类型的大小
size of 求变量大小括号可以省略
二进制按位取反
看注释即可
前置后置加减
如图
强制转换类型
如图(不建议)
关系操作符
>
>=
<
<=
!= 用于测试“不相等”;
== 用于测试“相等”
逻辑操作符
&& 逻辑与
| | 逻辑或
逻辑与
逻辑或:两个有一个为真则为真
条件操作符
如图所示,如果a大于b为真,执行a,若为假,执行b。
一些其他操作符
逗号操作符(,)
下标引用:例如:arr【45】=(......)
函数调用:例如:int ADD(int x,int y)
int a=ADD (3,5)
常见关键字部分介绍
register(寄存)
计算机的存储结构可以分成以下几部分
寄存器
高速缓存
内存
硬盘
这些存储结构存储的数据,为了CPU-中央处理器服务
当CPU需要数据时,会先从寄存器拿,如果寄存器没有,再向下一层拿数据,这样速度最快
signed
我们普遍使用的int函数其实叫做 signed int,只不过平时会省略,这样的int是有符号的
符号的int叫做:unsigned int
上面这种数据类型还是挺长的,所以为了将一些数据类型简写,我们可以使用类型定义关键字
typedef
这样的话会简便不少
static
首先,让我们按下图代码运行:
这样运行的结果为:
如果我们使用static修饰局部变量a的话,那么a会变成一个静态的局部变量:
这样的运行结果为:
当static修饰全局变量时,会使全局变量的作用域缩短至当前源文件。
extern
声明外部函数
例如:使用其他源文件的ADD函数:int ADD(...)“{...}时
可以在当前的源文件这样调用函数
extern int ADD(int int);
宏的定义
指针
内存
像我们常用的内存,一般分为4g,8g,16g等等。
以生活中的理解来说,内存,可以比作是整个中国的占地面积,
而内存中的每一个内存单元的地址,我们可以看作是我们住的地方的每一个门牌号。
那么每个房间都有平米数,而每个内存单元也有固定的大小,为一个字节(byte)。
谈到地址,我们就要想一个问题,地址是如何产生的,又是如何编写的呢?
我们都知道,电脑分为32位和64位,这里指的位是什么呢?
32位
指的就是有32根地址线/数据线
那么便有正负之分,同样,在计算机中用二进制0和1来表示。
那么也就是
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000002
...
1111111111111111111111111111111111111
一共有 2^32 这么多种二进制序列,
而每一种二进制序列,其实就相当于一个编号,也就是每一个内存块上的地址。
一共这么多的地址,每一个地址对应一个内存块的话,一个内存块的大小是多少呢。
试想,一个内存块的大小是1个bit,那么通过计算我们得知,一个32位的机器,整个内存大小大约在0.5g左右,无法支撑我们的日常使用。
那么如果一个内存块的大小是一个字节呢,计算后,发现内存总大小在4g,这样的话还是差不多的,所以,一个内存块的大小其实就是一个字节。
由此可得,64位的机器内存总大小为8g。
指针变量
现在再想另外一个问题,比方说我们写一行代码
int a = 10; 这个a占四个字节,那我们怎么能知道,这个a在内存中占的是哪一块的地址呢,由此,我们需要使用取地址操作符&
有一种变量,是专门来存放地址的,这种变量叫指针变量
代码写法为:int* p = &a;
然后进行打印
运行结果为16进制,可转化为二进制序列。
*代表解引用操作符(int*是类型, 和 *p是不一样的)
*p 代表对p进行解引用操作,找到p所指对象a
当然,也不止int可以进行取地址和解引用操作,例如char类型
假设:char ch=‘a’;
char* xx=&a;
*xx=‘w’;
也是一个道理。
指针变量大小
存地址大小可以理解为,存32个bit位的二进制序列的大小,也就是说
在32位的平台上,一个指针变量的大小为4个字节。
64位为8个字节。
结构体
当我们想表示一些复杂对象时,借助int 这种类型的话还是不太好表达的,所以我们可以利用结构体,来自己创造一个类型
图例注释
第三趴结束。