Day01
-
~ ~ 用户主目录 eg:~/.vimrc 打开配置文件
-
/根目录下 文件 eg:绝对路径:从根目录出发描述文件位置 eg: cd /dev/bus/usb/001/
-
-a 显示所有文件
-
Linux中以 . 开D头的都是隐藏文件 eg: 交换文件 ".06task.c.swp" 已存在!
-
Ctrl+h 显示隐藏文件(图形形式)
-
Day02
正常模式
光标移动
-
gg 光标跳转第一行(加头文件)
-
G 光标跳转到最后一行
-
n(数字)加回车 光标向下跳转n行
-
n- 光标向下跳转n行
-
nG 直接跳转到n行
-
vim file.c +n 从第n行进入文本(知道哪错了,进入改错位置)
删除操作
-
dd 删除光标所在的一行代码
-
n+dd 删除n行
-
dw/de 删除一个连续字符串(dw会删除空格)
替换代码
-
r 替换光标所在的一个字符
-
cw 替换一个连续的字符串
插入模式
进入插入模式
-
i 在当前光标前面进入插入模式
-
I大写 光标跳转到当前行首,进入插入模式
-
A 光标跳转到当前行尾,进入插入模式 (文尾忘加;)
-
o 在当前行的下面一行插入空白行,进入插入模式
-
O 在当前行的上面一行插入空白行,进入插入模式
-
:>n n行代码向右缩进一次
-
:<n n行代码向左缩进一次
C语言介绍
优点特点
-
C语言是专门为了编写操作系统而诞生的语言,天生适合对硬件编程
-
以运行速度快而著称,而且非常适合编写数据结构和算法
缺陷
-
因为出现时间太早,所以有很多缺陷,因为没想到普通人也可以编程,但很多前辈总结避免这些缺陷或陷阱的经验
数据类型
为什么要对数据进行分类?
-
现实中数据就是自带类别属性的
-
对数据进行分类可以节约内存存储空间,从而提高运行速度
-
8 Bit 比特= 1 Byte 字节
手动编译的方法
-
gcc 01hello.c && ./a.out
-
对C语言的扩展和增强 gcc file.c -std=gnu99
C代码如何从源文件变成可执行文件的过程(背)
-
1.预处理:把源文件翻译成预处理文件
-
gcc -E xxx.c 把显示预处理结果到终端
-
gcc -E xxx.c -o xxx(同名).i 把预处理的结果存储到xxx.i的预处理文件中
-
-
2.编译:把预处理文件翻译成汇编文件
-
gcc -S xxx.i 生成以.s(小写)结尾的汇编文件
-
-
3.汇编:把汇编文件翻译成二进制目标文件
-
gcc -c xxx.s 生成以.o结尾的目标文件
-
-
4.链接:把若干个目标文件合并成一个可执行文件
-
gcc a.o b.o c.o......... 生成a.out可执行文件
-
内建
整型
-
signed 有符号 二进制最高位是作为符号位,符号位0正1负 eg:1001 1101 0110 1100
类型名 字节数 数据范围
-
signed char 1个字节 -128~127(背) 256个数
-
signed short 2字节 -32768~32767(背)
-
signed int 4字节 正负20亿
-
signed long 4/8字节(取决于操作系统32/64) 正负20亿/正负开头9开头19位整数
-
signed long long 8字节 正负开头9开头19位整数
注意:signed不加就代表加了 signed char = char
-
-
unsigned 无符号 二进制最高位是作为数据位
类型名 字节数 数据范围
-
unsigned char 1个字节 0~255 (背) 256个数
-
unsigned short 2字节 0~65535 (背)
-
unsigned int 4字节 0~40亿
-
unsigned long 4/8字节(取决于操作系统32/64) 0~40亿/0~1开头的20位整数
-
unsigned long long 8字节 0~1开头的20位整数
注意:由于定义无符号数据时比较麻烦,在标准库中把这些类型重新定义成了新的类型名
需要包含添加头文件<stdint.h>
无符号:uint8_t/uint16_t/uint32_t/uint_64t
有符号:int8_t/int16_t/int32_t/int_64t
-
模拟型
字符型:char
-
字符就是图案或者符号 ,字符在内存中依旧存储成整数,需要显示成字符时,操作系统会根据ASCII码表中对应的关系把整数 显示成对应的符号或者图案 eg: '1'字符 1数值
-
'\0' 0 特殊字符 空字符(什么都不打印)
-
'0' 48
-
'A' 65
-
'a' 97
注意:char 想要显示成整数时:%hhd (整型的char)
想要显示成字符时:%c
-
Day03
for循环语句
-
在for循环内定义的变量只能在for循环内使用,出了for后没法使用
while循环
-
等同于(while循环相当于for循环期中一个精简版本)
-
for循环是负责解决明确知道循环次数的问题
-
while循环是负责只知道循环结束条件不确定循环次数的问题
-
break
-
在switch中关闭case开关
-
跳出循环,如果有循环嵌套时,只能跳出最近一层的循环
Day04
数组
-
计算数组的总字节数:sizeof(arr)
-
计算数组成员单个的字节数:sizeof(arr[0])
-
计算数组长度的公式:sizeof(arr)/sizeof(arr[0])
数组越界问题
-
数组越界后果
C语言为了程序运行效率考虑,C语言不检查数组下标是否越界
-
一切正常
-
段错误 (核心已存储)
-
脏数据
-
二维数组
注意:
-
大括号内数据可以全部省略,那么就可以自动补0
-
大括号数据和列数不省略,行数可以省略,编译器会自动计算行数 eg: [] [5]
-
不能省略二维数组的列数 eg: [3] []