From 4213456bb8e1388eb1700b0a03415de0dc5cd534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=A4=A7=E4=BB=99?= <1900919313@qq.com> Date: Thu, 8 Aug 2024 10:25:06 +0800 Subject: [PATCH] c --- docs/notes/01_c-basic/06_xdx/assets/4.svg | 4 + docs/notes/01_c-basic/06_xdx/assets/5.png | Bin 0 -> 12508 bytes docs/notes/01_c-basic/06_xdx/assets/6.svg | 4 + docs/notes/01_c-basic/06_xdx/assets/7.svg | 4 + docs/notes/01_c-basic/06_xdx/index.md | 100 ++++++++++++++++++++-- 5 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 docs/notes/01_c-basic/06_xdx/assets/4.svg create mode 100644 docs/notes/01_c-basic/06_xdx/assets/5.png create mode 100644 docs/notes/01_c-basic/06_xdx/assets/6.svg create mode 100644 docs/notes/01_c-basic/06_xdx/assets/7.svg diff --git a/docs/notes/01_c-basic/06_xdx/assets/4.svg b/docs/notes/01_c-basic/06_xdx/assets/4.svg new file mode 100644 index 0000000..7891ad7 --- /dev/null +++ b/docs/notes/01_c-basic/06_xdx/assets/4.svg @@ -0,0 +1,4 @@ + + + +
字节(001)
字节(008)
字节(015)
字节(022)
字节(029)
字节(036)
字节(043)
字节(050)
字节(057)
字节(002)
字节(009)
字节(016)
字节(023)
字节(030)
字节(037)
字节(044)
字节(051)
字节(058)
字节(003)
字节(010)
字节(017)
字节(024)
字节(031)
字节(038)
字节(045)
字节(052)
字节(059)
字节(004)
字节(011)
字节(018)
字节(025)
字节(032)
字节(039)
字节(046)
字节(053)
字节(060)
字节(005)
字节(012)
字节(019)
字节(026)
字节(033)
字节(040)
字节(047)
字节(054)
字节(061)
字节(006)
字节(013)
字节(020)
字节(027)
字节(034)
字节(041)
字节(048)
字节(055)
字节(062)
字节(007)
字节(014)
字节(021)
字节(028)
字节(035)
字节(042)
字节(049)
字节(056)
字节(063)
内存条
\ No newline at end of file diff --git a/docs/notes/01_c-basic/06_xdx/assets/5.png b/docs/notes/01_c-basic/06_xdx/assets/5.png new file mode 100644 index 0000000000000000000000000000000000000000..9c383d663a339b0347261e74fe76bd8e9e162b01 GIT binary patch literal 12508 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 + + +
内存条
00000000
num(变量)
内存地址:0x0012FF44
程序
内存地址:0x0012FF44
00000000
00000000
00001010
10 的二进制
\ No newline at end of file diff --git a/docs/notes/01_c-basic/06_xdx/assets/7.svg b/docs/notes/01_c-basic/06_xdx/assets/7.svg new file mode 100644 index 0000000..52aa890 --- /dev/null +++ b/docs/notes/01_c-basic/06_xdx/assets/7.svg @@ -0,0 +1,4 @@ + + + +
内存条
00000000
num(变量)
内存地址:0x0012FF44
程序
内存地址:0x0012FF44
00000000
00000000
00001010
10 的二进制
p(变量)
内存地址:0x0022FF44
00000000
00010010
11111111
01000100
内存地址:0x0022FF44
0x0012FF44 的二进制
\ No newline at end of file diff --git a/docs/notes/01_c-basic/06_xdx/index.md b/docs/notes/01_c-basic/06_xdx/index.md index e55f20d..4b613cd 100644 --- a/docs/notes/01_c-basic/06_xdx/index.md +++ b/docs/notes/01_c-basic/06_xdx/index.md @@ -208,13 +208,101 @@ # 第三章:指针的理解和定义(⭐) -## 4.1 概述 +## 3.1 变量的访问方式 -* +* 计算机中程序的运行都是在内存中进行的,变量也是内存中分配的空间,且不同类型的变量占据的空间大小不同,如:char 类型的变量是 1 个字节,short 类型的变量是 2 个字节,int 类型的变量是 4 个字节... +* 之前我们都是通过`变量名(普通变量)`访问内存中存储的数据,如下所示: + +```c +#include + +int main() { + + // 定义变量,即:开辟一块内存空间,并将初始化值存储进去 + int num = 10; + + // 访问变量,即:访问变量在内存中对应的数据 + printf("num = %d\n", num); + + // 给变量赋值,即:给变量在内存中占据的内存空间存储数据 + num = 100; + + // 访问变量,即:访问变量在内存中对应的数据 + printf("num = %d\n", num); + + return 0; +} +``` + +* 上述的这种方式也称为`直接访问`;当然,既然有`直接访问`的方式,必然有`间接访问`的方式,如:`指针`。 + +> [!IMPORTANT] +> +> * ① 我们通过`变量名(普通变量)`访问内存中变量存储的数据,之所以称为`直接访问`的方式,是因为对于我们写程序而言,我们无需关心如何根据内存地址去获取变量对应的数据,以及如何根据内存地址将数据存储到对应的内存空间,这些操作步骤都是`编译器`帮助我们在底层完成的(自动化)。 +> * ② 但是,我们也可以通过`内存地址`去操作内存中对应的数据(手动化),这种方式就称为`间接访问`的方式了,相对于`直接访问`方式来说,要理解的概念和操作的步骤要比之间`直接访问`方式要多很多,但是效率高。 + +## 3.2 内存地址和指针 + +* 其实,在之前《数组》中,我们就已经讲解了`内存地址`的概念了,即:操作系统为了更快的去管理内存中的数据,会将`内存条`按照`字节`划分为一个个的`单元格`,并为每个独立的小的`单元格`,分配`唯一的编号`,即:`内存地址`,如下所示: + +![](./assets/4.svg) + +> [!NOTE] +> +> 有了内存地址,就能加快数据的存取速度,可以类比生活中的`字典`,即: +> +> * ① 内存地址是计算机中用于标识内存中某个特定位置的数值。 +> * ② 每个内存单元都有一个唯一的地址,这些地址可以用于访问和操作存储在内存中的数据。 + +* 对于之前的代码,如下所示: + +```c +#include + +int main() { + + // 定义变量,即:开辟一块内存空间,并将初始化值存储进去 + int num = 10; + + return 0; +} +``` + +* 其在内存中,就是这样的,如下所示: + +![](./assets/5.png) + +* 虽然,之前我们在程序中都是通过`变量名(普通变量)`直接操作内存中的存储单元;但是,编译器底层还是会通过`内存地址`来找到所需要的存储单元,如下所示: + +![](./assets/6.svg) + +> [!NOTE] +> +> 通过`内存地址`找到所需要的`存储单元`,即:内存地址指向该存储单元。此时,就可以将`内存地址`形象化的描述为`指针👉`,那么: +> +> * ① `变量`:命名的内存空间,用于存放各种类型的数据。 +> * ② `变量名`:变量名是给内存空间取一个容易记忆的名字,方便我们编写程序。 +> * ③ `变量值`:变量所对应的内存中的存储单元中存放的数据值。 +> * ④ `变量的地址`:变量所对应的内存中的存储单元的内存地址,也可以称为`指针`。 +> +> 总结:内存地址 = 指针。 + +* `普通变量`所对应的内存空间`存储`的是`普通的值`,如:整数、小数、字符等;`指针变量`所对应的内存空间`存储`的是另外一个变量的`地址(指针)`,如下所示: + +![](./assets/7.svg) + +> [!NOTE] +> +> 有的时候,为了方便阐述,我们会将`指针变量`称为`指针`。但是,需要记住的是: +> +> * 指针 = 内存地址。 +> * 指针变量 = 变量中保存的是另一个变量的地址。 +> +> 下文中提及的`指针`都是`指针变量`,不再阐述!!! -## 4.2 普通变量和指针变量的区别 +## 3.2 普通变量和指针变量的区别 在 CLion 中使用 GDB 调试时,可以通过反编译代码来查看指针变量和普通变量的区别。下面是具体的步骤: @@ -283,15 +371,15 @@ int main() { -# 第五章:指针的运算(⭐) +# 第四章:指针的运算(⭐) -## 5.1 概述 +## 4.1 概述 -## 5.2 总结 +## 4.2 总结 * 在 C 语言中,`普通变量`是直接存储`数据`的`变量`。对于普通变量,支持的操作包括: * ① **赋值操作**:给变量赋值,如:`int a = 5`。