指针是C语言的精华所在,有了指针,C语言可以实现许多灵活的操作,如动态数据结构操作等等。事实上,指针之所以有如此广泛的运用,主要有两方面:一是指针往往是某个计算的唯一表达途径,这是它的一些性质所定;另一方面是,使用指针往往能写出更为高效简洁的程序,这是由指针的本质属性所致。
一.什么是指针?
你完全可以将指针与“地址”联想起来,因为指针保存的就是地址。我们经常学的是变量,我们知道在写程序解决问题的时候,需要定义变量,注意变量类型等等,甚至还知道函数传参的性质,直观而言也就是不能在函数里面改变main函数中定义的变量。这是因为变量只是一个名字,你很难通过一个名字对你研究的对象做出本质上的改变(虽然你可以进行一些赋值操作)。但是指针是触及数据本质的法宝——你可以掌控数据的地址——这就是指针得以灵活的原因。
从上图可以非常直观的了解指针,p是一个指针型变量,它指向你的对象c。事实上也容易看出,p其实也有地址,也就是地址的地址,这就是链表的原型——通过一系列指针连接起来,于是可以通过第一个依次找到后面的几个。
二.指针的声明
知道了指针,就需要知道怎么得到指针,以及怎么利用指针中保存的地址,来访问其所指的变量。这两个操作,就需要指针的两个一元运算符:
1.取地址符
p = &c;
c是你的对象,p是定义的一个指针,通过这个操作,你就能得到c的地址,称p为指向c的指针。
2.间接引用运算符
c = *p
这样你就将p指向的对象的值,赋给了c。
下面我们给出指针的声明方式
int *p; //p是指向int类型变量的指针,即p指向的对象必须是int类型
int x = 1,y = 2,z[10];
p = &