前言一、指针
1.内存
2.指针变量及其大小
二、总结前言
今天学的是指针,C语言很重要的一个部分,打算自己写出来当作复习!对于C语言来说,指针是一个很重要的部分,接下来让我们一起来了解一下指针。
一、指针1.内存
首先,指针与电脑上的存储器→内存有关联,计算机的程序都是在内存里面进行的。
此处先展开讲一下内存,在使用内存的时候,会把内存分为一个个小单元,这里的每一个单元的大小是 1个字节 。如下图所示:
图 1 内存
如果想访问内存里面的某一个单元,就需要给每一个单元进行编号,便于查找,像生活中给每假每户编门牌号一个道理,这些编号就被称作为 内存单元的地址。
此处打开VS2019写段代码举个例子,如图中所指的变量a,是一个整型,整型一共占4个字节,也就是说,假设变量a要开设空间,这个时候要占下图3中内存的4个字节的空间,可以理解成占了4个小格。
图 2
图 3
2.指针变量及其大小
那这个时候如何取出变量图3 a 的地址,就涉及到一个取地址的操作符号&。
&a;//取出的是所占4个字节空间的第一个字节的地址(地址小的那一个字节)
此时在VS2019代码演示一下。
图 4
这里可以看到程序运行后打印出来的地址是00CFFE98,我们要怎么才能知道这个地址是a的第一个编号/地址,这里就可以用到F10调试按键来观察。如下图所示:
图 5
等左侧黄色小箭头知道打印程序的那一行开始监视,此时左侧如图输入&a,得出一个地址0x0133F878
图 6
那么得出的这个地址是一个编号,需要存放起来就要再开设一个变量,我们假设这个变量叫p,如图所示编程,此时p是用来存放地址的,所以我们把p称为指针变量。此处的p类型应该写成 int * 。
图 7
因为p里面存放的是&a,所以理论上来讲他们两个是一样的,所以我们可以看到打印出来之后两个值是一模一样的。此处我们可以看到int 后有一个*,这里解读一下,*表示p是一个指针变量,int表示p指向的对象类型是int,是一个整型,举一反三,假设用的是double类型,要取出d的地址,我们就会用到double* pd = &d。
C语言中用到指针变量来存放地址是为了可以通过变量来找到地址所在位置
图 8
如图注释中写的,通过*p找到a,再修改其中的数值,也是可以的。可以理解为*p就是a。
那么指针变量的大小是多少呢?接下来就会探讨到。
图 9
此处打印出来的值都是4,为什么呢,接下来我们倒推一下,当我们想知道指针变量有多大 → 地址的存放需要多大空间 → 地址是如何产生的数据
我们知道早期的计算机有32位,64位,此处拿32位机器举例子,32位机器代表的是有32根地址线/数据线,这个是物理的电线,能通电,会输出高电平和低电平,高电平,高电平电信号转换成数字信号就是1,反之位0。
因此当32跟电线同时通电的时候会出现高电平和低电平,列举出以下几种部分可能发生的情况(不完全)
图 10
此处可以产生2的32次方种情况,也就是对应的2的32次方个用2进制序列组成的内存编号,这样的一个32位由0和1组成的序列需要存起来的话需要给到32个bit位,也就是4个byte。所以,倒推回来的这样一个二进制序列存储起来只需要4个字节,那一个指针用来存放一个4个字节的地址,那么指针变量的大小对应也是4个字节。
二、总结一个内存单元的大小是一个字节,管理一个内存单元需要一个编号(地址),这个编号的大小(所需要的空间)是4个字节。
ps:写的不好,刚接触编程,但是我很喜欢编程!不喜勿喷~文章很多错误的地方,欢迎大佬们来指点!!我会虚心学习的!



