前言
本篇以笔记为主的C语言详解,全篇一共十章内容,2万6千多字,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!
形而上学者谓之道,形而下学者谓之器
第 1 章 C语言的流程
(1) C程序经历的六个阶段
- 编辑(Edit)
- 预处理(Preprocess)
- 编译(Compile)
- 汇编(Assemble)
- 链接(Link)
- 执行(Execute)
(2) C语言编写代码到运行
都是先编译,后链接,最后运行。(.c ---> .obj --->.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。
(3) C程序流程图
计算机基础
计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址.
4.bit 是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位(1 byte = 8 bit).
(1) 十进制转 N 进制
重点
万能公式 十进制 转 N进制
x 一直 除 n(n表示n进制),取余数倒排
例1 十进制转二进制
x = 25(十进制) 转二进制
25 / 2 = 12 ... 1
12 / 2 = 6 ... 0
6 / 2 = 3 ... 0
3 / 2 = 1 ... 1
1 / 2 = 0 ... 1
得到 二进制 11001,对应十进制 25
例2 十进制转八进制
x = 25(十进制) 转八进制
25 / 8 = 3 ... 1
3 / 8 =0 ... 3
得到 八进制 31,对应十进制的 25
例3 十进制十六进制
x = 25(十进制) 转十六进制
25 / 16 = 1 ... 9
1 / 16 =0 ... 1
得到 十六进制 19,对应十进制的 25
特别注意
十六进制中 没有 10 ~ 15的阿拉伯数字,
用的是 a ,b ,c ,d ,e ,f 字母代替 数字10 ,11 ,12 ,13 ,14 ,15
(2) N进制 转十进制
重点
万能公式 N进制转十进制
右边第一位开始,第一位的数字,从0次幂开始 ~ i次幂结束,依次递增1
n进制 转成十进制 = x * n^ i 次幂
例1 二进制转十进制
(二进制)11001
= 1 * 2^4 + 1 * 2^3 + 1 * 2^0
= 25
例2 八进制转十进制
(八进制)31
= 3 * 8^1 + 1 * 8^0
= 25
例3 十六进制转十进制
(十六进制)19
= 1 * 16^1 + 9 * 16^0
= 25
(3) 原码反码补码
在计算机中,所有的数据都是用机器码存储的,也就是有0 和 1 组成
二进制最高是符号位
0 表示正数
1 表示负数
正数的原码,反码,补码都一样
负数的反码 = 它的原码符号位不变,其他位置取反
负数的补码 = 它的反码 + 1
负数的反码 = 它的补码 - 1
这里我们 用 16 位的short类型来举例,-1512在二进制数据中,补码怎么计算得到
0的反码 ,补码都是0
计算机是以 补码的方式来运算 的
当人类看运算结果的时候,要看他的原码
第 2 章 数据类型、运算符和表达式
一、变量
(1) 变量的概念
内存中有个存储区域,这个地方的数据可以在同一类型范围内不断变化通过变量名,可以访问这块内存区域,获取里面的值;
变量名的构成:数据类型 变量名 值
C语言中变量声明格式: 数据类型 变量名 = 值
(2) 变量的注意
全局变量
定义在函数外部的叫全局变量,默认初始化为0
静态变量 static
带有static开头的关键字叫静态变量,默认初始化为0
局部变量
声明局部变量以后,要初始化赋值!定义变量时,这个变量使用的内存不一定被清空,它可能是垃圾值,运行程序会异常退出
(3) 变量的作用域
局部变量
在函数中定义的,有效范围在 定义开始到{ }结束
全局变量
在函数外定义,有效范围从定义位置开始,到程序结束!
二、标识符
标识符的概念
C语言中,凡是可以自己命名的地方,都叫做标识符 例如:函数名,变量名,数组名,结构体名
C语言标识符的命名规范
1.只由英文大小写字母、数字、或 _(下划线) 组成
2.第一个字符只能是英文字母或下划线,不能数字开头!!!
3.大小写英文字母代表不同的字符
4.不能是C语言的关键字
C语言 32个关键字
单击表格关键字跳转详细解释
auto | short | int | long |
float | double | char | struct |
union | enum | typedef | const |
unsigned | signed | extern | register |
static | volatile | void | if |
else | switch | case | default |
for | do | while | continue |
break | goto | sizeof | return |
数据类型的分类
三、运算符
C语言运算符优先级
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[常量表达式] |
左到右 |
-- |
() |
圆括号 |
(表达式)/函数名(形参表) |
-- |
||
. |
成员选择(对象) |
对象.成员名 |
-- |
||
-> |
结构体选择(指针) |
对象指针->成员名 |
-- |
||
2 |
- |
负号运算符 |
-表达式 |
右到左 |
单目运算符 |
~ |
按位取反运算符 |
~表达式 |
|||
++ |
自增运算符 |
++变量名/变量名++ |
|||
-- |
自减运算符 |
--变量名/变量名-- |
|||
* |
取值运算符 |
*指针变量 |
|||
& |
取地址运算符 |
&变量名 |
|||
! |
逻辑非运算符 |
!表达式 |
|||
(类型) |
强制类型转换 |
(数据类型)表达式 |
-- |
||
sizeof |
长度运算符 |
sizeof(表达式) |
-- |
||
3 |
/ |
除 |
表达式/表达式 |
左到右 |
双目运算符 |
* |
乘 |
表达式*表达式 |
|||
% |
余数(取模) |
整型表达式%整型表达式 |
|||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 |
|||
5 |
<< |
左移 |
变量<<表达式 |
左到右 |
双目运算符 |
>> |
右移 |
变量>>表达式 |
|||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 |
|||
< |
小于 |
表达式<表达式 |
|||
<= |
小于等于 |
表达式<=表达式 |
|||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 |
|||
8 |
& |
按位与 |
表达式&表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
表达式^表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
表达式|表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
14 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
-- |
/= |
除后赋值 |
变量/=表达式 |
-- |
||
*= < |