嵌入式学习——C语言&Linux——学习笔记——部分

一、C语言基础

1、程序

  • 程序:解决完成特定功能(任务)的流程步骤

  • 计算机程序:让计算机去实现解决问题的步骤执行

  • 计算机语言:计算机能够识别任务的内容(指令)

  • 机器语言:使用0和1表示指令功能

  • 汇编语言(助记符语言):把机器指令用助记符进行表示

  • 高级语言:类似自然语言的编写方式

  • C语言:高级语言,适合嵌入式开发

2、C语言程序的编写编译

  • Linux中编写C语言程序

    • vim工具:在终端上编写文本文件内容----可以使用vim来写程序代码

    • vim:只是编辑器,类似于 windows 记事本,只负责写文本内容(程序内容)

    • vim终端的文本编辑器:创建、显示、编辑文本编辑器

  • vim操作:

    • vim:打开vim编辑

    • vim + xxxx文件名:使用vim 打开 xxxx文件

      • 如果文件名不存在,创建一个新文件(临时)

      • vim操作文件,所有的操作都依靠键盘输入(键盘输入是:文本内容还是命令)

  • vim是多模式编辑器:

    • 命令模式(默认):键盘输入(输入的任何内容),都是命令

    • 插入模式:键盘输入,都是操作文本内容

    • 底行模式:操作vim编辑器

                                

  • vim常用命令

插入命令

命令作用
a在光标所在字符的位置之后插入
A在光标所在行的行尾插入
i在光标所在字符的位置之前插入
I在光标所在行的行首插入
o在光标所在行的下一行插入(新建行)
O在光标所在行的上一行插入(新建行)

定位命令

命令作用
gg跳转到第一行的开头
GG 或 ]]跳转到最后一行的开头
nG跳转到第n行
:n跳转到第n行
0跳转到光标所在行行首
$跳转到光标所在行行尾
:set nu显示行号
:set nonu不显示行号
b跳转到前一个单词的第一个字符
w跳转到下一个单词的第一个字符

复制粘贴删除命令

命令作用
yy复制光标当前行
nyy复制从光标开始的n行
p把复制或剪切的n行,粘贴到光标下一行(新建)
dd剪切光标当前行
ndd剪切从光标开始的n行(删除,剪切不进行粘贴)
x删除光标所在位置的字符
nx删除光标所在位置后n个字符
nX删除光标所在位置前n个字符
dG删除光标所在行开始到文件末尾
:n1,n2d从n1行开始删除到n2行结束
u恢复,撤销

保存退出命令

命令作用
:w保存当前文件
:w 文件名把当前文件额外保存一份为文件名,备份(另存为)
:q退出当前文件
:q!强制退出
:x(!)(强制)保存且退出,x == wq
:a所有文件

搜索替换命令

命令作用
/查找内容从当前光标位置开始查找对应内容,n:查找下一个,N:查找上一个
:%s/old/new全文替换指定字符串,%s:代表全文,把old 替换为 new
:n1,n2s/old/new从n1行开始到n2行结束,把old替换为new
r替换光标所在位置的字符,然后输入的字符就是替换的字符
R从当前光标开始,使用输入的内容替换当前行的内容

  • 编译:把C程序翻译为计算机能够认识的指令(机器程序)

  • 命令:gcc

    • gcc xxx文件名----->编译:进行对应的转换

    • 生成一个编译好的(计算机能够识别,执行的程序):a.out

    • 执行 可执行程序 :

    • ./a.out

3、关键字

  • 关键字:在规范C语言时,用于表示一定的特殊含义的字符,只要在C程序中使用,就代表了一定的操作和含义,约定的具有特定功能的单词或字符

基本数据类型5个

关键字说明
void声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果。
char字符型类型数据,属于整型数据的一种。
int整型数据,通常为编译器指定的机器字长。
float单精度浮点型数据,属于浮点数据的一种,小数点后保存6位。
double双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位。

修饰关键字4个

关键字说明
short修饰int,短整型数据,可省略被修饰的int。
long修饰int,长整形数据,可省略被修饰的int。
signed修饰整型数据,有符号数据类型。
unsigned修饰整型数据,无符号数据类型。

复杂类型关键字5个

关键字说明
struct结构体声明。
union共用体声明。
enum枚举声明。
typedef声明类型别名。
sizeof得到特定类型或特定类型变量的大小。

存储级别关键字6个

关键字说明
auto指定为自动变量,由编译器自动分配及释放。通常在栈上分配。
static指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。
register指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。
extern指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的。
const与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改
volatile与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值。

跳转类关键字4个

关键字说明
return用在函数体中,返回特定值(或者是void值,即不返回值)。
continue结束当前循环,开始下一轮循环。
break跳出当前循环或switch结构。
goto无条件跳转语句。

分支结构5个

关键字说明
if条件语句。
else条件语句否定分支(与if连用)。
switch开关语句(多重分支语句)。
case开关语句中的分支标记。
default开关语句中的“其他”分治,可选。

循环结构3个

关键字说明
forfor循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。
dodo循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件。
whilewhile循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件, 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

4、标识符

  • 标识符:在当前程序中设定的一些字符符号表示,表示一定的意义,代表一个定义的作用(我们自己所定义的字符符号含义),自己命名的符号

标识符的表示:

  • 由字母数字和下划线构成,且只能以 字母或 下划线开始

A-Z , a-z , 0-9 , _

合法标识符:

abc,a1,a2,o_k

非法标识符:

%abc,a$b,1a

5、数据类型

1、整型

  • 整数存储

    • 二进制,补码形式存储

  • 整型:根据在计算机中设定的大小

    • short (int):短整型------16位二进制(16bit),2B

    • int:整型-------------32位(32bit),4B

    • long (int):长整型-------在32位系统大小为 32位(32bit),4B ;在64位系统大小为 64位(64bit),8B

    • long long (int):超长整型----64位(64bit),8B

  • 有符号数:

    • (signed):有符号数,最高位为 符号位

  • 无符号数:

    • unsigned:无符号数,没有符号位

  • 32位无符号整数:unsigned int

  • 16位有符号整数:signed short int--------->short

2、浮点型(实型)

  • 浮点型存储:

    • 二进制,补码形式存储

    • 数据部分 + 指数部分

  • 浮点型:设定类型大小

  • float:单精度浮点型---32位(32bit),4B,精度:6/7

    • 符号位:1bit

    • 阶码:8bit

    • 尾数:23bit

  • double:双精度浮点型-----64位(64bit),8B,精度:15/16

    • 符号位:1bit

    • 阶码:11bit

    • 尾数:52bit

  • 定义 一个32位浮点数:float

3、字符型

  • 对于字符型数据,在计算机中存储,依旧使用二进制 0 和 1表示

  • 对于每个字符统一用一种标准的二进制来表示

  • 在C语言中,使用 ASCII码来表示(小整数)

ASCII码表

Bin (二进制)Oct (八进制)Dec (十进制)Hex (十六进制)缩写/字符解释
0000 00000000x00NUL(null)空字符
0000 00010110x01SOH(start of headline)标题开始
0000 00100220x02STX (start of text)正文开始
0000 00110330x03ETX (end of text)正文结束
0000 01000440x04EOT (end of transmission)传输结束
0000 01010550x05ENQ (enquiry)请求
0000 01100660x06ACK (acknowledge)收到通知
0000 01110770x07BEL (bell)响铃
0000 100001080x08BS (backspace)退格
0000 100101190x09HT (horizontal tab)水平制表符
0000 1010012100x0ALF (NL line feed, new line)换行键
0000 1011013110x0BVT (vertical tab)垂直制表符
0000 1100014120x0CFF (NP form feed, new page)换页键
0000 1101015130x0DCR (carriage return)回车键
0000 1110016140x0ESO (shift out)不用切换
0000 1111017150x0FSI (shift in)启用切换
0001 0000020160x10DLE (data link escape)数据链路转义
0001 0001021170x11DC1 (device control 1)设备控制1
0001 0010022180x12DC2 (device control 2)设备控制2
0001 0011023190x13DC3 (device control 3)设备控制3
0001 0100024200x14DC4 (device control 4)设备控制4
0001 0101025210x15NAK (negative acknowledge)拒绝接收
0001 0110026220x16SYN (synchronous idle)同步空闲
0001 0111027230x17ETB (end of trans. block)结束传输块
0001 1000030240x18CAN (cancel)取消
0001 1001031250x19EM (end of medium)媒介结束
0001 1010032260x1ASUB (substitute)代替
0001 1011033270x1BESC (escape)换码(溢出)
0001 1100034280x1CFS (file separator)文件分隔符
0001 1101035290x1DGS (group separator)分组符
0001 1110036300x1ERS (record separator)记录分隔符
0001 1111037310x1FUS (unit separator)单元分隔符
0010 0000040320x20(space)空格
0010 0001041330x21!叹号
0010 0010042340x22"双引号
0010 0011043350x23#井号
0010 0100044360x24$美元符
0010 0101045370x25%百分号
0010 0110046380x26&和号
0010 0111047390x27'闭单引号
0010 1000050400x28(开括号
0010 1001051410x29)闭括号
0010 1010052420x2A*星号
0010 1011053430x2B+加号
0010 1100054440x2C,逗号
0010 1101055450x2D-减号/破折号
0010 1110056460x2E.句号
0010 1111057470x2F/斜杠
0011 0000060480x300字符0
0011 0001061490x311字符1
0011 0010062500x322字符2
0011 0011063510x333字符3
0011 0100064520x344字符4
0011 0101065530x355字符5
0011 0110066540x366字符6
0011 0111067550x377字符7
0011 1000070560x388字符8
0011 1001071570x399字符9
0011 1010072580x3A:冒号
0011 1011073590x3B;分号
0011 1100074600x3C<小于
0011 1101075610x3D=等号
0011 1110076620x3E>大于
0011 1111077630x3F?问号
0100 00000100640x40@电子邮件符号
0100 00010101650x41A大写字母A
0100 00100102660x42B大写字母B
0100 00110103670x43C大写字母C
0100 01000104680x44D大写字母D
0100 01010105690x45E大写字母E
0100 01100106700x46F大写字母F
0100 01110107710x47G大写字母G
0100 10000110720x48H大写字母H
0100 10010111730x49I大写字母I
0100 10100112740x4AJ大写字母J
0100 10110113750x4BK大写字母K
0100 11000114760x4CL大写字母L
0100 11010115770x4DM大写字母M
0100 11100116780x4EN大写字母N
0100 11110117790x4FO大写字母O
0101 00000120800x50P大写字母P
0101 00010121810x51Q大写字母Q
0101 00100122820x52R大写字母R
0101 00110123830x53S大写字母S
0101 01000124840x54T大写字母T
0101 01010125850x55U大写字母U
0101 01100126860x56V大写字母V
0101 01110127870x57W大写字母W
0101 10000130880x58X大写字母X
0101 10010131890x59Y大写字母Y
0101 10100132900x5AZ大写字母Z
0101 10110133910x5B[开方括号
0101 11000134920x5C\反斜杠
0101 11010135930x5D]闭方括号
0101 11100136940x5E^脱字符
0101 11110137950x5F_下划线
0110 00000140960x60`开单引号
0110 00010141970x61a小写字母a
0110 00100142980x62b小写字母b
0110 00110143990x63c小写字母c
0110 010001441000x64d小写字母d
0110 010101451010x65e小写字母e
0110 011001461020x66f小写字母f
0110 011101471030x67g小写字母g
0110 100001501040x68h小写字母h
0110 100101511050x69i小写字母i
0110 101001521060x6Aj小写字母j
0110 101101531070x6Bk小写字母k
0110 110001541080x6Cl小写字母l
0110 110101551090x6Dm小写字母m
0110 111001561100x6En小写字母n
0110 111101571110x6Fo小写字母o
0111 000001601120x70p小写字母p
0111 000101611130x71q小写字母q
0111 001001621140x72r小写字母r
0111 001101631150x73s小写字母s
0111 010001641160x74t小写字母t
0111 010101651170x75u小写字母u
0111 011001661180x76v小写字母v
0111 011101671190x77w小写字母w
0111 100001701200x78x小写字母x
0111 100101711210x79y小写字母y
0111 101001721220x7Az小写字母z
0111 101101731230x7B{开花括号
0111 110001741240x7C|垂线
0111 110101751250x7D}闭花括号
0111 111001761260x7E~波浪号
0111 111101771270x7FDEL (delete)删除
  • 字符存储:

    • 存储的字符对应的ASCII码,ASCII码就是整数,以二进制存储

  • 字符类型:

    • char:字符类型--------8位(8bit),1B

    • 字符类型可以当做整数进行操作:char 可以表示为 只有8位的整数

6、变量与常量

  • 常量:在整个程序中都不会进行改变的数据

  • 变量:在整个程序中可以进行变化的数据,在内存中存储数据后,空间中的数据值可以进行改变,变量在使用的使用需要有一个名字(能够找到对应的变量);对于变量而言,必须先有(定义),才能使用

  • 变量定义:

  • 存储类型 数据类型 变量名;

    • 变量名:使用标识符来表示(相当于赋予了变量数据的含义)

  • 存储类型:

    • auto:默认类型

      • 通常可以省略,表示定义在栈区,由系统进行管理

    • static:静态类型

    • register:寄存器类型,存储到cpu中(通常等同于 auto)

    • extern:外部类型

  • 变量初始化:

    • 在定义变量时,为变量赋初始值

    • 存储类型 数据类型 变量名 = 值;

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值