2、指针变量和解引用操作符(*)
(1)指针变量
我们通过取地址操作符(&)拿到的地址是一个数值,比如:0x006FFD70,这个数值有时候是需要存储起来,方便后期再使用的,此时我们将地址存放在指针变量中。
比如:
指针变量也是一种变量,这种变量是用来存储地址的,存放在指针变量中的值都理解为地址。
(2)如何拆解指针类型
上面的代码p的类型是int*,我们可以这样理解。
这里的p左边写的是:int*,*是在说明p是指针变量,而前面的int是在说明p指向的是整型(int)类型的对象。
例如:有下面一个float类型的变量ch,ch的地址,应该放在什么类型的指针变量中呢?答案是:float类型。
代码如下:
(3)解引用操作符
我们将地址存放保存起来,该如何使用呢?请看下面讲解。
举个生活中的例子:我们使用地址要找到一个房间,在房间里我们可以拿去或者存放物品。
在C语言中也是一样的,我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象。此时要用到解引用操作符(*)。
代码举例:
*p的意思是通过p中存放的地址,找到指向的空间,*p其实就是a变量了;所以*p=500,这个操作就把a改成了500.
(3)指针变量的大小
在【C语言】深入理解指针(一)(上)(上一篇博客)中,我们知道32位机器假设有32根地址总线,每根地址总线出来的电信号,转换成数字信号后是1或者是0,那我们把32根地址总线产生的二进制序列当做是一个地址,那么一个地址就是32个bit位,需要4个字节才能存储。
如果指针变量是用来存放地址的,那么指针变量的大小就得是4个字节的空间才可以。
同理,64位机器,假设有64根地址总线,一个地址就是64个二进制位组成的二进制序列,存储起来就需要8个字节的空间,指针变量的大小就是8个字节。
32位平台下:
64位平台下: