C语言day02
【1】vi编辑器
进入vi编辑器
vi 文件名
若文件存在,则直接打开文件;若文件不存在,则创建并打开文件。
1.三种模式:
插入模式(编辑模式):编辑正文,敲代码
命令行模式(默认进入):在此模式下只能做一些命令的操作(不能编辑正文内容)
底行模式:在此模式下只能做一些命令的操作(保存、退出、分屏)
三个模式下的操作指令:
底行模式:
保存:w
退出:q
保存退出:wq
强制:!
不保存退出:q!
查找:/str
替换:s/str/str1将光标所在行的第一个str替换成str1
全部替换:%s/str/str1/g 将str全部替换成str1
设置行号:set nu
取消行号:set nonu
取消高亮:nohl
指定行的复制:5,10y
指定行的删除:5,10d
命令行:
复制:yy 多行 nyy(n:表示的是行数 光标所在行到n行数内容)
删除(剪切):dd ndd
粘贴:p
撤销:u
反撤:ctrl+r
光标的移动:移动到首行:gg 移动到末行:G 移动到行首:0 移动到行尾:$
整理代码的格式:gg=G
【2】gcc编译器
- 预处理 展开头文件、替换宏定义,删除注释
gcc -E test.c -o test.i
- 编译 检查语法,有错报错,没有则生成汇编语言
gcc -S test.i -o test.s
- 汇编 生成一个不可执行的二进制文件
gcc -c test.s -o test.o
- 链接 链接函数库,最终生成一个机器可以识别的二进制可执行文件
gcc test.o -o test(可执行文件)
上面这是一个完整的gcc编译过程,但是编译过于繁琐,正常编译采用下面这两种简便的代码编写
gcc test.c 会生成一个a.out的可执行文件,这个可执行文件每当有一个新的文件被这样执行就会覆盖掉之前的a.out可执行文件
gcc test.c -o test(自己定义的文件名) 这个命令会生成一个test的可执行命令,不会像上一个指令那样被新的文件覆盖
补充指令:cat 文件名:显示文件内容
【3】计算机存储单位
位 bit 字节 byte
1B=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
【4】计算机数据表示形式
1》数值型数据
二进制 0 1 10
八进制 0-7 010
十进制 0-9
十六进制 0-9 a-f 0x10
A | B | C | D | E | F |
10 | 11 | 12 | 13 | 14 | 15 |
1.十进制转二进制:
- 短除法 除2到取余数
17 10001
2.拆分法 8421
2.二进制转十进制
权值乘以0、1
权值就是从右往左2的n-1次方
01001-->9
3.二进制转八进制
每三位看做一个八进制位,不够在前面补零
1011010-->001011010-->132
4.二进制转十六进制
每四位看做一个十六进制位,不够在前面补零
100101010-->000100101010-->0x12a
2》非数值型数据
man 手册查看ascii码表
man手册:man 章节号 名称
1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
char字符 由' '包裹一个字符
'\0' 0 字符串结束标志
'\n' 10 换行
space 32 空格
'0' 48 字符0
'A' 65
'a' 97
(1)字符1-9转换为数字1-9 需要减48
(2)字符小写字母a~z转换为大写字母A~Z 需要减32
(3)字符大写字母A~Z转换为小写字母a~z 需要加32
(4)\ 转义字符,转义字符可以将其后面的三位数字所代表的八进制数据转换为相对应的ASCII字符或数字
printf("%c\n",'a'); //a %c字符类型
printf("%d\n",'a'); //97 %d数字类型
printf("%d\n",' '); //32
printf("%d\n",'1'); //49
printf("%d\n",'1'-48); //1
printf("%c\n",'A'+32); //a
printf("%c\n",'\071'); //9
【5】词法符号
1》关键词 32个
概念:由系统预定义的具有特殊功能的词法符号
存储类型:auto(自动) static(静态) extern (外部引用) register(寄存器)
数据类型:int(整型) char(字符) short(短整型) long(长整型) float(单精度浮点型) double(双精度浮点型) signed(有符号) unsigned(无符号)
构造类型:struct(结构体) union(共用体) enum(枚举)
选择类型:if else switch case default
循环结构:for while goto do break continue
其他类型:void(空) typedef(重定义) const(常量化) sizeof(计算内存空间大小)
volatile(防止编译器优化) return(返回值)
栈区:局部变量 由系统自动开辟空间、自动回收
堆区:由程序员手动开辟空间malloc、回收free
全局区/静态区:.bss .data 全局变量(全局区) static修饰的变量(静态区)
常量区: char *p="hello";
2》标识符
标识符用于给变量名、宏名、函数名、重定义名等等。
命名规则:
- 由字母、数字、下划线_组成
- 开头不能是数字
- 不能和关键字重复
- 最好见名知意
驼峰 niceDay小驼峰命名 NiceDay大驼峰命名
练习:
x*y a@b 6a a8 _a_B sum
3》运算符
算术运算符
+ - * / % ++ --
/ 整数相除,结果向下取整
9 / 2 = 4
9.0 / 2 = 4.5
% 取余 5%2==1 只能用于整数运算
++:在自身基础上做+1的操作(单目运算)
int a=1;
a++ ++a===>a=a+1 =2
只要语句中不只有++一种操作:
++在前:先自身+1,后做其他操作
++在后:先做其他操作,后自身+1
赋值运算:
int a = 1;
int b = ++a; //b=2,a=2 (先自加在赋值)
int c = a++; //c=1,a=2 (先赋值再自加)
单独成句:
int a = 1;
a++;
++a; //两个表达式最后a都等于2 单独成句就不会又过于复杂的问题