变量与指针变量

int a ,int *b
上述代码中,a表示变量,确切说是整型变量int。*b表示指针变量,确切的说是整型指针变量。它们之间有什么区别?
a=2
上面的代码可以理解为数值2存储在变量a中,到底存到那里了?
熟悉电脑的应该清楚,软件是在硬件上运行的。没有硬件,软件也就没有办法工作。硬件包括那些?硬盘,CPU,内存等等。一般来说,CPU的硬件结构分为地址线与数据线,也就是地址与数据。a在这里就是地址,2在这里就是数据。数据写到地址里,也就是存储到了内存。
b=2
上面的代码,也是数值2写入到地址b中,从CPU与内存硬件这个角度来说a与b没有区别。注意,(b)这个描述硬件是理解不了的。因为计算机能够理解的只有0与1的组合,也就是二进制。谁能理解(b)这样的描述?编程语言,例如C语言。
对于C语言来说,地址b里有一个数值2。然后,C语言读取数值2,根据(*)描述,把数值2当做地址,再到内存地址为2的位置,把地址2的内容读出来做为数据。总结一下,指针会读两次内存地址。第一次从内存读出来的数值,被当做新的内存地址再一次读数据。
b=&a
一般来说,不允许直接给指针变量b写数据2。当然,极特殊情况下也是可以的。正常情况是把变量a的地址写给变量b。(&)这个符号是取地址符号。(&a)的意思是读取a的内存地址。
【变量与指针变量】a,&a
根据前面的定义,a是取数据,&a是取地址。所以,a在这里即表示数据也描述地址。对于CPU与内存的硬件关系来说,数据线与地址线是不分开的。地址里必然是有数据的,数据也必须有一个地址空间。

    推荐阅读