在学习数据结构的过程中,在用到各种表的时候,经常离不开指针。
当初学习C语言的时候指针这块就理解的不够透彻,导致现在复习数据结构写相关代码还是用数组模拟来实现。如此一来,失去了真正学习数据结构的意义。
那么今天我又重新温习了指针,那么现在让我来一起学习下指针的相关操作。
我们可以这样形象的理解:小黄谈了个女朋友,他又很抠门,只好恬不知耻的对他对象说:“我周末了去你宿舍…”。那肯定不能同意啊!!!,但是奈何小黄脸皮厚,最终通过一系列措施得到了他对象的房间号。 以上纯属瞎编。想说的就是房间号就是相当于地址,那么小黄要找的是他对象,他对象就相当于一个元素,就需要通过房间号来定位他对象在哪。 所以得先有房间号(地址),才好方便后面的事情
& //取地址符,顾名思义就是得到一个变量的地址
* //指针
我们先来理解下普通变量跟指针变量的区别:
普通变量:存储实际的值 指针变量:存储具有实际值的变量的地址。
我们来看这样的一段代码如下:
1.我们定义了两个变量,一个是整形变量n,一个是指针变量p。 2.我们通过先给整形变量n赋值,然后取n的地址(用取地址符号&),然后把n的地址赋值给p。那么指针p里面存的就是n的地址。 3.然后我们打印。第一次打印时我们对p没有加上*。我们可以看出打印结果为n的值 以及 p存储的地址。第二次我们对p加上*得到的是p所指向的n的值。 4.那么通过代码就很容易理解了。
我们指针变量p里面存储的是n的地址。 我们可以说:p指向n及p->n
// * 是一个单目运算符,用来访问指针的值所表示的地址上的变量。
//可以用来做右值,也可以用来做左值
int k = *p;
*p = k + 1;
接着我们来看下面一段代码:
我们在函数内修改了*P的值,却发现n的值变了。这是为什么呢? 因为我们的函数穿进来的参数是一个地址,然后我们用指针访问的话实际就是n的值。
那么对于一个数组来说,其实也是用指针访问的。 数组变量是特殊的指针
//数组变量本身表达地址,所以
int a[10];
int *p = a;//无需用&取地址
//但是数组的单元表达的是变量,需要用&取地址
a == &a[0];
//[]运算符可以对数组做,可以对指针做
p[0] <==> a[0];