注:此篇文章仅限初步了解,本小白后续会持续进行详解指针的相关操作。
目录:
- 认知内存
- 一个内存单元的大小
- 地址的产生
- 理解
- 指针
- 用途
- 指针变量的大小
- 💞结尾
了解指针为什么需要了解内存呢?
因为指针是用来管理内存,访问内存的。
认知内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 (程序是加载到内存中的,并且在运行时会向内存申请空间来存储相应的数据)。
📚我们可以将内存与房间作类比,一栋楼中每个房间都有门牌号,我们可以通过门牌号找到对应的房间。
电脑的内存是如何管理的呢❓
内存也一样,它有很多个“房间”,通过编号,可以快速的找到对应的“房间”,这个“房间” 就是内存单元。
一个内存单元的大小
计算机中的一些单位:
假如一个内存单元是一个bit,那么一个char类型的数据就需要8个内存单元来管理,过于夸张。所以,每个内存单元的大小是1个字节(Byte)。
地址的产生
如果要访问一块内存单元,就需要找到它的编号.
📘在计算机上是有地址线(物理电线)的,当地址线通电就会产生高低电平信号,之后转换为数字信号 1 或者 0 .
例如:
在32位计算机上,会有32根地址线,每根地址线会产生 1 或者 0 ,这样32根地址线产生的信号就是 1 和 0 组成的二进制序列。例如:00000000 00000000 10100000 11101000 。同时通电后,其实就会产生2^32 种可能出现的序列编号。每一个序列管理一块内存单元。
这样 , 2*32 个序列 就可以管理 2^32 个内存空间 , 也就是 4个GB 的内存空间。
理解
对于一个这样的代码,怎么看待内存呢 ?
int num = 10;
一个int类型是4个Byte,即需要申请4个内存单元。
VS2022内存窗口:
我们可以明确看到这 4个内存空间存储的值,由于是按照16进制显示,所以为 0x0000000a 。
VS 2022 监视窗口:
由于内存空间是连续的,所以&num 会拿到所占用内存空间的第一个内存单元的地址。
我们可以用 %p 将地址以16进制形式打印出来。
指针
📙地址也是数值,地址是用来访问内存空间的,我们需要将地址存储起来以方便我们使用。在c语言中,地址其实就是指针,储存指针的变量,叫做指针变量。
例如:
int main()
{
int num = 10;
int *p = #
return 0;
}
针对该处指针变量p的类型可以有以下解释:
int * * —— 表示变量p是指针变量。
int——表示变量p指向的是int类型的变量。
用途
可以利用解引用操作符改变对应的值。
#include<stdio.h>
int main()
{
int num = 10;
int *p = #
*p = 20;
printf("%d\n", num);
return 0;
}
❗️结果:
这里 *p 就是通过p里面的地址直接访问到num的内存,并进行修改。
注意:口头语中的指针,基本都是指针变量。
指针变量的大小
指针变量的大小取决于地址的大小
指针变量是用来存放地址的。
📙在32位的机器上:
地址是32个二进制位,这个地址需要4个字节来存储,,所以指针变量的大小是4个字节。
📙在64位的机器上:
地址是64个二进制位,这个地址需要8个字节来存储,,所以指针变量的大小是8个字节。
💞结尾
之后的内容,本小白会持续更新,刚开始写博客,有不足的地方还请各位大佬多多指正,非常感谢!