1.内存
认识指针,首先要认识内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的,所以为了有效的使用内存,就把内存分成一个个小的内存单元,每个内存单元的大小是1个字节(byte),为了能够有效的访问到内存的每一个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址,地址即是C语言中的指针
那么问题来了,怎么给内存进行编号?
其实在32位操作的机器上,有32根通电的地址线(64位就有64根),通电之后产生高电(1)和低电(0),
2^32byte = 4,294,967,296byte = 4,194,304KB= 4,096MB=4GB(4个G差不多就是一块内存的大小,当然也可以更大)
这样就有了2^32次方个不同的值,从而用来对内存单元进行编号,但是2进制表示地址过于复杂,所以就用16进制来表示
那如果我现在初始化整型 a =10,占4个字节,有4个地址,是4个都作为 a 的地址还是选择一个作为地址呢?如果选一个,又应该选择哪一个呢?
这时,我们按F10调试,再在 调试 - 窗口 中找到 内存 ,在将地址改为 &a,回车 ,再按F11一直过定义 a 的那一行,得到下图:
00000000 00000000 00000000 00001010 (2进制)
0x 00 00 00 0a (16进制)
//因为是16进制,所以 a 就等于10
所以由图可知,地址取的是最小的那个,即0x0133FB08
2.指针
知道了地址后,我们就可以引入指针了,请看下面的代码:
&:取地址操作符
*:解引用操作符
我们取变量 a 的地址,将它放在变量 pa 中,pa 的类型为int* ,int 说明 pa 指向的 a 是 int 类型的,*则说明 pa 是指针变量,再用解引用操作符,通过 pa 找到 pa 指向的 a ,pa 就是 a ,再将20存入*pa中,ctrl+F5后,打印出来结果为20
//这是利用指针来修改变量 a 的值,也是指针最最基本的内容
现在是不是觉得指针也没有那么可怕了?
但是无论如何,指针都是一个很重要的知识,我们以后还是要去认真地学习它