初识指针
想要了解指针,要先知道内存
内存:是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元大小为1字节
为了能够有效访问到内存的每个单位,就给内存单元进行了编号,这些编号就被称为该内存单元的地址
那么内存是怎么编号的呢?
在计算机中有32位和64位的计算机
而32位指的是32根地址线,地址线是物理线,可以通电,通电后会发出正负电,而正电为1,负电为0
所以电信号转换成数字信号,即1和0组成的二进制序列
而32个地址线产生的二进制序列的信号为32个全0,即0000 0000 0000 0000 0000 0000 0000 0000到1111 1111 1111 1111 1111 1111 1111 1111 ,而我们就可以把这样的序列作为一个内存的编号。
(0000 0000 0000 0000 0000 0000 0000 0000表示0,以此类推,一共有2的32次方个)当这个二进制序列成为一个内存的编号时,我们就把它称为这个内存的地址
一个内存单元又是多大空间呢?
假设一个内存单元是1bit,则一共有2的32次方个内存单元,那么2的32次方个比特是多大呢?
2的32次方bit=4294967296bit
/8=536870912 Byte
/1024=524288 Kb
/1024=512 Mb
/1024=0.5 Gb
因为C语言中最小的单位是1Byte(char),而1Byte=8bit,8bit就有8个地址,当时人们感觉不合适,有些过分细化了,所以最后决定一个内存单元是一个字节
那我们怎么在C语言中知道一个变量的具体地址呢?
如图,当我们在编译软件中定义a时, 我们按F10调试,选择窗口-内存-内存1(1),在地址栏输入&a,即可拿到a的地址;或者选择窗口-监视-监视1(1),点击添加监视的项,输入&a即可
printf输出a的地址,当我们拿到a的地址时,我们发现a的地址也是一个值,那么我们怎么把它存起来呢?
如图,pa是用来存放地址的。
因为pa是指针变量,变量要有类型,如图
那么我们要a的地址能做什么呢?
如图,我们可以通过a的地址找到a,并且间接的改变a的值
如何计算指针变量的大小?
如图,那么为什么是4呢?
因为指针的空间大小,取决于地址的存储需要多大空间,如:
32位计算机,是32个bit位组成的二进制序列,而32个bit就是4byte
64位计算机同理,就是8byte
即当你在64位计算机上求指针大小,则为8