C语言学习笔记(一)
故障导向安全原则
Linux系统有什么特点
Linux开源(开源产品没有法律责任)
Linux网络功能发达
主要用于服务器,现在云计算很多都是服务器linux,嵌入式系统中linux应用广泛
Linux支持的硬件丰富
x86,arm,mips
Linux是正真的多任务,多用户系统
Linux安全性更好
稳定性高
Linux文件系统: 在存储介质上存放文件的一种格式
可以把几个相邻字节合并起来记录一个数字,可以把内存中用来记录一个数字的所有字节成为一个存储区
一个存储区只能记录一种类型的数字,数值可以变但类型不可以变
Linux文件类型——linux一切都是文件
Linux文件目录结构是树形的
决定路径与相对路径
Linux目录结构里面 .表示当前目录 ..表示父目录
cd - 恢复上一步操作
--help 中文查询
gg返回开头
/开始查询
history 查看历史使用过的命令
命令 |more 方便察看很多的命令管道输出到more
=======================================================
vim文本文件编辑器
rm-r 删除目录
cp-a 复制包括字目录
mv 剪切
命令行下: u 撤销
x 删除单个字母
a 当前插入
A 行尾插入
o 下一行插入
O 上一行插入
yy 复制
p 粘贴
dd 删除,剪切
GG 文件尾
gg 文件头
home 行头
end 行尾
=========================================================
*
* 多行同时插入(快编辑)
* ctrl + v 选中需要修改的行号
* ctrl + 上下 单选中列
* 左右 行选中
*
* r+需要改的内容
* 数学+r+需要替换的内容(数字为光标后么的几个)
*
* shift + i 写入需要插入
* esc 退出
*
* x 删除
*
* 查着定位
* :/ 需要查在的内容 (可视化) n可以查找下一个
*
* 全局查找替换
* :%s/查找的内容/替换的内容/g g为全局
*
* :e 文件名 在命令行中两个文件中相互切换
* :e # 在两个文件中切换简便写法
*
* :数字 直接跳到60行
* vim 文件名 +60 编辑文件时直接跳的60行
*
* r+需要改的内容
* 数学+r+需要替换的内容(数字为光标后么的几个)
*
* k
* h l
* j
*
* 自动对齐shift+v 全部选中 再按 = 对齐
* (shift + 5) 匹配成对的括号
*
* :n1,n2 m n1 从n1行到n2行剪切到n3行后面
*
* :n1,n2 copy n3 从n1行到n2行复制到n3行
*
* 全选 ggVG
* 全部复制 :1,$y
==========================================================
最好需要了解的语言
c,c++【编译型语言】
javasctipt(万能语言),python[编译+解释语言:优点-可跨操作系统],
lua外挂编写,go(谷歌将开发的语言)
<> 首先到标准库所在位置找
“” 首先在当前目录找,如果当前目录没有则到标准库的位置去找
程序处理的过程
1、预处理:头文件等预处理 gcc -E 成.i文件
2、编 译:把C编译成汇编或者目标文件
3、汇 编:把汇编转换成目标文件 gcc -S 成.s 汇编文件
4、链 接:把目标文件和库文件链接成可执行程序 gcc -c 成.o 生成.o目标文件
gcc -o可以变换新的文件名称
-std=c89 (默认)
-std=c99 决定采用那个版本进行编译
file 文件名: 看文件格式信息
gcc -v 查看版本
常量——不可修改的已知数据在编译过程中内存就确定
变量——可以修改可以未知在程序运行中内存才确定
问题:可修改和不可修改什么时候说的?——程序在内存运行时可发现
%p 取地址
计算机由硬件和软件两部分构成
软件
系统软件:操作系统
应用软件:
文件系统
所有文件系统都是采用分组方式管理文件,一个分组里可以包含多个任意多个文件
一个分组里的文件还可以再次分组
文件系统里采用文件夹(目录)代表文件分组
路径
某个文件到目标文件的线路
绝对路径:根目录作为起点,所有绝对路径以 / 为开头的
相对路径:相对路径里不应该包含起点的位置
vim
由三种工作模式组成
正常模式,命令模式,插入模式
正常模式下可以执行简单命令
命令模式下可以执行复杂命令
插入模式下可以修改文字内容
#include
<> 表示以系统中预先规定好的一组目录一次作为起点查找目标文件
"" 把当前文件所在目录作为起点查找
注释
变量命名规则:驼峰命名法,下划线方式
编译器GCC
windows环境下的gcc。MinGW
*
* c语言里使用变量代表存储区
* 变量必须首先声明然后才能使用
* 变量声明语句可以让计算机给变量分配存储区
*
* 赋值操作符左边的内容必须可以代表一个存储区,代表一个存储区的内容叫做左值
* int num = 0;
* num = num; //左边代表内存中存储区,右边代表存储区里的值
有符号类型 (signed)
* char字符类型 256个不同的整数,整数和字符可以互相替代的
*
* '0'- '9' ---> 48 (0x30) - 57
* 'A'- 'Z' ---> 65 (0x41) - 90
* 'a'- 'z' ---> 97 (0x61)- 122 'a' - 'A' = 32 (0x20)
*
256个ASCII码对应256个字符,被分成两组,每组128个
其中一组字符对应的整数在所有计算机上都一样,这些整数范围从0-127
另外一组字符对应的整数在不同计算机上可能不同,这些整数的范围可能
+从-128到-1也可能从128到255
'\n' 换行 '\r' 回车(会覆盖当一行)
'\'' ' '\"' "
"\\" \
*
* 短整型 short 65536个整数
*
* 长整型 long 2^32个整数 <==> int类型
*
* 无符号类型(unsigned)(eg: unsigned int )
* 无符号类型所包含的最小数字一定是0
*
* 整数相关类型的数字范围相互重叠并且逐渐扩大,越靠近零包含类型越多
* long( short( char() ) )
*
* 程序中不带小数点的数字后叫u表示数字的类型是无符号整数类型
*
* 浮点类型
* 单精度 float
* 双精度 double
*
* 程序中带小数点的数字默认是双精度浮点类型
* 在小数点数字后加f表示数字类型是单精度浮点类型
* 3.14f 表示单精度
*
C语言里可以扩展新的数据类型叫复合数据类型
C99规范类型
bool类型
0假 1 真
*
* char %c 1byte 256
* short %hd unsignedshort %hu 2byte 65536
* int %d unsignedint %u 4byte 2^32
* long %ld unsignedlong %lu 4byte 2^32
* float %f %g 4byte 单精度类型,默认精度小数点后6位
* double %lf %lg 8byte 双精度类型,默认精度小数点后15位
* %f和%lf会保留小数点后面多余的零
* %g和%lg不会保留小数点后面多余的零
*
* sizeof()小括号里对任何存储区内容的修改不会正真发生
* int num = 0;
* sizeof(num=10)
* num 还是等于 0
*
非负数二进制转十进制
2^4 = 16 55 1 奇数余1
2^5 = 32 27 1
2^6 = 64 13 1
2^7 = 128 6 0 偶数余0
2^8 = 256 3 1
2^9 = 512 1 1
2^10= 1024 0 0
负数不能直接在二进制和十进制之间转换,需要借助相反数
负数二进制和十进制转换的时候需要先计算相反数,而后把计算结果转换,
最后根据转换结果计算相反数
**************
有符号类型数字最左变的二进制数位可以用来判断符号,这个数为叫符号位
0表示非负数 1 表示负数
把二进制中每个数位的内容变成相反数,而后再加一得到的结果就是相反数的二进制
(取反加一)
十进制 二进制
正 B | C
|
————————— A->B (负数变正是)B->C (十进制转换成二进制)
| c->D (二进制取反加一)
负 A | D
一个数进行转换时,要先确定,该数是有符号还是无符号什么类型的数据,字符类型8位
10111010
如果说这个数是有符号char类型则这个数是负数
如果说这个数是有符号int类型,int为32为,这1011 1010前面自动补全零
< 续 C语言学习笔记(二)>