目录
计算机语言
计算机语言:人和计算机交流的语言。
C语言
C语言是一门通用的计算机编程语言,广泛用于底层软件开发。
C语言是一门有国际标准的语言
计算机语言发展
- 二进制语言:0/1这样的序列语言
- 汇编语言:将具有特定功能的0/1序列进行封装,用助记符代替。
- B语言
- C语言
写C语言代码
写代码的工具——编译器
怎么写呢?
- 创建一个项目
- 创建一个源文件
- 写代码
- 编译代码
写主函数(main函数)——C语言是从主函数第一行开始执行的,所以C语言代码中得有主函数,并且只能有一个,不然报错。
数据结构
定义:计算机语言-解决生活中的问题那么他必须有能力描述生活中的问题——数据结构
C语言数据类型
- char:字符数据类型——1字节
- short:短整型——2字节
- int:整形——4字节
- long:长整型——4字节
- long long:更长的整形——8字节
- float:单精度浮点数——4字节
- double:双精度浮点数——8字节
计算机中的单位
- bit——比特位
- byte——字节=8bit
- kb——1024byte
- mb——1024kb
- gb——1024mb
- tb——1024gb
- pb——1024tb
- eb——1024pb
编码和字符集
前言
计算机只认识0/1,其在底层就被识别为高电平和低电平;0/1在计算机底层存储就是按位来存储的,一个位里有2种状态即0/1,由于我们需要表示很多状态,所以计算机定义=>8位为1字节,1字节里面的状态为2^8(256)个可能性;在这里,每种状态可能就对应一个字符。
编码:信息从一种形式转换成另一种形式的过程
字符集:由权威机构形成的编码表
字符集分类
- ASCII码:英文字符集,用一个字节7位表示
- ISO8859-1:西欧字符集,用一个字节8位表示
- GB2312:简体中文字符集,最多用两个字节编码
- GBK:GB2312的升级,加入了繁体字,最多用2个字节编码
- Unicode:国际通用字符集,融合了目前人类使用的所有字符,为每个字符分配唯一的字符码,用两个字节编码
GB2312两个字节与1个字节区分方式
留出头一位为首位,首位如果为1表示一个字节不够,要加上后面一字节才能完整表示一个字符,首位如果为0,那么表示1字节就为一个字符
关于Unicode
因为unicode用2个字节编码,共可以表示字符2^16(65536)表示世界所有符号是够的,但是,怎么确定多少个字节代表一个字符呢,如果腾出一位代表首位那么2^15不够表示世界所有字符
UTF标准
三种编码方案:UTF-8、UTF-16、UTF-32
以UTF-8为例实现Unicode
将特定字符编码转换为16进制看所处在下面的范围,如果范围在下面的某一行就会采取该行的存储方式(采用几字节的存储方式),然后将该字符的二进制数按照顺序填入下面的x
十进制数的表示
十进制编码又称BCD码,分压缩BCD码和非压缩BCD码。
压缩BCD码
压缩BCD码又称8421码,他是用4位二进制编码来表示一位十进制的符号。
例如:
- 十进制数124的压缩BCD码为:0001 0010 0100
- 十进制数4.56的压缩BCD码为:0100.0101 0110
非压缩BCD码
非压缩BCD码是用8位二进制来表示一位10进制符号,其中低四位二进制编码与压缩BCD码相同,高四位任取。
例如:
- 十进制数124的非压缩BCD码为:0011 0001 0011 0010 0011 0100
ASCII码表
前言:ASCII码又称美国信息交换标准代码,其是在计算机中用数字表示字符符号的一种行式。
变量与常量
前言
常量:不能改变的量。
变量:能被改变的量。
%d | 整形 |
%u | 无符号整形 |
%p | 打印地址 |
%f | 单精度浮点型 |
%s | 字符串 |
%lf | 双精度浮点型 |
%c | 字符型 |
定义变量的方法
//数据类型 变量名=值;
int a=5;
作用:给一段指定的内存空间起名,方便我们来操作这块内存
变量的命名
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字。
变量的分类
- 局部变量:在大括号内部定义的变量
- 全局变量:在大括号外面定义的变量
当局部变量与全局变量名字冲突的情况下——局部优先
变量的作用域以及生命周期
程序设计概念,通常来说,一段程序代码中所用到的名字并不是总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域:变量所在的局部范围
全局变量的作用域:整个工程
全局变量写在方法的最前面并且全局变量定义的名称只能定义一次(范围:在一个源文件中)
变量的生命周期:变量生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期:进入局部范围生命周期开始,出局部范围生命周期结束。
全局变量的生命周期:程序的生命周期
关于常量
含义:不变的量
作用:用于记录程序中不可更改的数据
常量的分类
- 字面常量——(eg:‘a'、36……)
- const修饰的常变量(具有常属性的变量)——(eg:const int a=8;)
- #define定义的标识符常量(可以放在任何位置)——(eg:#define MAX 10000)MAX值不可以更改
- 枚举常量——(可以一一列举的常量)
转义字符
转变了字符本来的意思常用方法,在字符前加\
转义字符 | 意义 | ASCII码值(十进制) |
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符''\' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
C语言的注释
- 代码中有不需要的代码可以删除掉也可以注释掉
- 代码中有些代码比较难懂,可以加一些注释文字
注释分类
1.单行注释(注释一整行)——(//写的代码)
2.多行注释(注释多行)——(/*写的代码*/)
多行注释不支持嵌套注释:遇到第一个注释开头作为注释开头,遇到第一个注释结尾作为注释结尾。
关键字
关键字汇总
- C语言提供的,不能自己创建关键字
- 变量名不能是关键字
关键字的理解
auto:是自动的,每个局部变量都是auto修饰的
原因:局部变量都是有作用域的,每个局部变量在作用域内被创建,出了作用域自动销毁,所以每个局部变量前面默认加一个auto
break:用于循环语句的跳出循环
case:用于switch语句的分支选择
char:字符类型修饰符
const:将变量加上const后,此变量便具有常属性,不可以再被更改,其本质还是一个变量
continue:用于循环语句结束当前循环,跳到下一次循环
default:switch语句里的默认选项
do:do……while循环所用
double:双精度浮点型
else:if……else里的选择
enum:枚举类型
extern:用来声明外部符号(声明时不需要指定它的值,指定他的类型即可)
//假设在一个源文件中有一个函数,我在另一个源文件中想使用它,那么我可以在要使用的源文件中进行函数声明
extern ADD(int, int);
也可以写成
extern ADD(int a, int b);
//在一个源文件中有2个.c文件,其中一个声明了int类型变量a并为其赋了值那么在另一个.c文件中要想使用,应提前声明一下extern int a;(前提:a是整个工程的全局变量)
注意:变量声明为外部变量,那么前面必须加extern,数组和函数可以不加(若不加则默认会有extern关键字)
float:单精度浮点型
for:for循环的使用
goto:goto语句时使用
if:选择语句时使用
int:整形
long:长整型
register:寄存器关键字(用此关键字修饰的属性建议放到寄存器中)
cpu取数据一般都去寄存器里面拿,因为内存速度太慢了
short:短整型
return:返回关键字
signed:有符号的
unsigned:无符号的
sizeof:计算类型的大小
static:静态的
- static修饰局部变量,改变了局部变量的生命周期(本质上改变了变量的存储类型)一般来说局部变量在函数结束之后就销毁了,但是用static修饰后变量的生命周器与文件同步,而且这个静态局部变量只能由本函数引用。
- static修饰全局变量,使得这个全局变量只能在自己所在的源文件内部可以使用,其他源文件中不能使用。(全局变量在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。)
- static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用,本质上使函数的外部链接属性变成了内部链接属性
struct:结构体
switch:switch分支语句
typedef:类型重定义
//将unsigned int 用u_int修饰符表示,可以在方法里面(需要使用前定义),方法外面定义
typedef unsigned int u_int;
union:联合体(共用体)
void:空类型(无具体类型)
volatile:线程可见性,禁止指令重排序
while:while循环