0x01 数据类型

C语言有六种基本数据类型,语法如下:
数据类型 空间名 ; C 语言规定以’;’来代表每条指令的结束


以上数据类型又分为有符号数和无符号数,使用 unsigned 修饰
另外在C99规范引入的数据类型(布尔型),只有1和0(True、False)

1
2
3
4
int i = (double)a; //将double类型的变量a强制转换int
printf("%d",sizeof(i)) //sizeof() 获取存储区大小

result:4

0x02 进制转换

不同进制数转十进制:位数上数值 x 进制数(^第多少位) = 十进制数
eg: 10101000 = 1 x 2^7 + 1 x 2^5 + 1 x 2^3 = 168

十进制转不同进制数:十进制数 / 转换的进制 = 结果 (取余,从下往上排列)

二进制转八进制和十六进制:八进制 = 三位二进制数、 十六进制 = 四位二进制数

0x03 操作运算符

四则运算符 (+、-、*、/)
取余运算符 (%)
赋值运算符 (=)
自增/自减运算符 (++、- -)
关系运算符 (>、<、==、===、>=、<=、!=)
复合赋值运算符 (+=、-=、*=、/=、%=)
逻辑运算符 (&&、||、!)
    逻辑与(&&): 两边运算结果都为真即为真
    逻辑或(||): 两边运算结果有一边为真即为真
    逻辑非(!): 真为假、假为真
    注: 具有短路特征
位运算符: (所有数值在底层都是以二进制数计算)
    左/右移位(<</>>): 正常情况下,向左移 = 原数 x 2 、向右移 = 原数 / 2
    按位与(&): 只要有一个0,结果就为0
    按位或(|): 只要有一个1,结果就为1
    按位异或(^): 不同为1,相同为0
    按位取反(~): ~可以取相反数
唯一的三目运算符:条件运算符:布尔值?公式一:公式二

0x04 缓冲区

程序在输入或输出都会经过缓冲区
键盘缓冲区过程 键盘输入->键盘缓冲区->输入缓冲区->程序
如果缓冲区里有内容,便会影响下一次正常输入,因此我们需要清理缓冲区

清理输入缓冲区

1
scanf("%*[^\n]%*c");

输出缓冲区过程 程序->输出缓冲区->显示器屏幕
如果输出缓冲区里面有内容并且未被占满,可能导致程序不能正常输出

清理输出缓冲区

1
2
3
4
1.遇到 \n 打印
2.主函数结束打印
3.缓冲区充满打印
4.人工刷新 fflush(stdout);

0x05 变量

变量:即在程序运行过程中它的值是允许改变的量
变量作用域:指变量在哪些范围内可以使用
生命周期:指一个存储区可以被使用的时间范围

程序变量作用域:
局部变量:只作用在当前函数中,每次调用函数都会初始化
静态局部变量:只作用在当前函数中,只初始化一次,使用static修饰
全局变量:作用在整个程序

程序变量生命周期:
局部变量:从函数调用到该函数结束
静态局部变量:从函数调用到程序结束
全局变量:从程序开始到程序结束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdio.h"
int a = 20;
int fuction01(){
int a=10;
a+=1;
return a;
}

int fuction02(){
static a=10;
a+=1;
return a;
}

int main()
{
printf("%d\n",a);
printf("%d\n",fuction01());
printf("%d\n",fuction01());
printf("%d\n",fuction02());
printf("%d\n",fuction02());
return 0;
}

result:
20
11
11
11
12