一、何为指针
如果在程序中定义了一个变量,在对程序进行编译时,系统会根据类型为这个变量分配内存单元。在下面,我们将以整型变量(内存单元大小为4字节)为例进行讨论。内存区的每一个字节有一个编号,比如,2000就是一个字节的地址,2001是另一个的,以此类推,而我们知道,储存一个整型变量a需要4个字节,那么a便被储存在2000~2003这4个字节中,我们输入2000,便能前往a的所在地找到它。这就是“地址”。由于通过地址能找到所需的变量单元,可以说,地址指向单元变量,并形象地将它称为“指针”。意思是说它能找到在地址为它之处所保存的内存单元。
二、指针变量
1、基本形式是:类型名(int)*变量名(p)。int*表明p是int型变量的指针变量。int也被称做基类型。
2、标明存放数据类型。例如上述a,如不标明是int型,则将无法确定是从1个字节取出数据(短整型),还是2个字节(短整型),抑或4个(整型)。
3、指针变量中只能存放地址(指针),不要将一个整数赋给一个指针变量。如:
* pointer_1=100; //point_1是指针变量,100是整数,不合法
原意是想将地址100赋给指针变量pointer_1,但是系统无法辨别它是地址。地址只能用地址符“&”得到。
4、引用指针变量的方法
1)给指针变量赋值,如:
p=&a //把a的地址赋给指针变量p
2)引用指针变量指向的变量
如果已执行“p=&a;”,则*p=1表示将整数1赋给a。
3)引用指针变量的值
printf("%o,p") //以八进制输出a地址的值,把地址转换成值并输出
小结
指针变量存放的值是指针,也就是其所指向元素的地址,而不是可以正常计算的数值(指针有指针的运算法则)。而指针变量也是变量,也有它自己的地址。因此我们能把“数值”理解为“住客”,“地址”理解为绵延不绝的笔直的只有一层的"旅馆"的房号。旅馆的房号是不变的,而房客却有来有离,他们有胖有瘦(并不是指数值的大小而是类型),所以订的房间数量不同。但他们都很守规矩,在前面房间客满或数量不够时,都会自觉入住后面的房间,除非有合适的客人愿意与他们交换,指针国的房客有严重的种族歧视倾向,他们只肯与本国游客交换房间。地址和数值是相对独立的,也是不兼容的。指针是用来表示地址和该数据类型的一个数值,存放这种数值的变量叫做指针变量。