一、变量和类型
1.数字类型
char:1 Byte.-128 - +127 / 0 - 255
short:2 Byte.-32768 - +32767 / 0 - 65535
int:4 Byte.-21亿 - +21亿 / 0 - 42亿9千万
long:32位系统下 4 Byte / 64位系统下 8 Byte
long long:8 Byte
float:4 Byte.IEEE标准规定
double:8 Byte
2.字符串类型
C语言中没有字符串类型,使用字符数组表示字符串
3.数组类型
4.指针类型
二、常量
1.字面值常量
10、10.0、10.0f(float)、10L(long)、10u(unsigned int)、10uL、'a'(int)、"abc"(char[4])
2.const常量
3.#define宏定义
4.enum枚举:在C语言中enum和int是等价的
三、条件语句
1.if
if、if else、if else if...
圆括号中放一个表达式,表达式的值为真(非0),执行if代码块中的内容;为假,执行else代码块
2.switch(不推荐使用)
break不能丢
case语句只能用整数
switch不能表示更复杂的条件
四、循环语句
1.while
圆括号中放一个表达式,表达式为真,执行循环体,为假,跳出循环
2.for
圆括号中三个表达式(1.初始化循环变量;2.循环条件;3.更新循环变量)
3.do while(不推荐使用)
4.goto(更不推荐使用,源于汇编语言)
五、数组(批量创建相同类型的变量)
int arr[]={0};
取下标,从0开始,到size-1结束
如果下表越界,则内存访问越界,是未定义行为
二维数组也是一维数组,只不过每个元素也是一个一维数组
求数组长度:size=sizsof(arr)/sizeof(arr[0])
六、函数(一次定义,多次调用)
参数:形参是实参的一份拷贝。使用指针让函数内部对函数外部的变量产生影响
返回值:可以是void(没有)
递归:在不允许使用循环、变量下
七、运算符
1.算术运算符:0不能作为除数
2.移位运算符:
<<:左移一位,相当于乘以2
>>:右移一位,相当于除以2
移负数位或者比较大的位,是未定义行为
3.位运算符:&、|、^、~
4.比较运算符:<、>、<=、>=、==、!=
5.逻辑运算符:&&、||、!
短路求值:&&只要左侧表达式为假,整个表达式的值为假
||只要左侧表达式为真,整个表达式的值为真
6.单目运算符:sizeof(编译器求值)、++/--、+/-、(类型)
short强转成int一般没问题,int强转成short可能发生截断,此时数据已经出错
7.条件运算符:( ? : )
8.运算符优先级:加()更明显
9.隐式类型转换
10.表达式求值顺序:一个表达式中对同一个变量修改多次,也是未定义行为
八、结构体(自定制类型)
-> 成员访问操作
结构体传参:用传指针的方式传参
九、指针
1.内存、冯诺依曼体系结构
2.用一个变量存放地址,指针变量
3.信息(1.房间号;2.房间有多大)
4.void*:只知道房间号,不知道房间大小
NULL(空指针):代指非法内存,保存为0号地址的指针
5.*(解引用操作):根据地址找到对应的内存的值
6.&(取地址操作):获取到变量的房间号
7.+/-(整数操作):跳过一个元素
8.指针相减:大部分情况没有意义。在同一个相同类型的连续空间才有意义
9.数组指针(是指针)和指针数组(是数组)
10.数组和指针关系:
数组在一定情况下能隐式转化成指针(直接取数组名参与运算)
指针能当成数组来用([])