对于c语言的学习来说指针的学习尤为关键,因为它与函数,数组都有着紧密的联系。接下来我来和大家说说我最近学到的关于指针的基础知识。
1.本质剖析
指针对于我们而言总给人以一种神秘感,叫啥不好非要叫指针,给人一种很难理解的感觉。事实上指针就是地址,至于为什莫不直接叫地址,而是把它叫成指针,原因也很简单,同一个东西在同一个地方反复出现,对大多数人来说是很混乱的事。总之,明确一点,指针就是地址。
2.指针的定义
int a=9;
int *p; //定义一个整型指针变量p
p=&a; //整型指针(地址)变量p保存整形地址指;同样的道理,上述的数据类型为整型,我们可以将数据类型定义为 float,double,long,short等都是合法的。对应解释为**指针(地址)变量p保存**地址值。
红色语句部分还有一种简写方式,可以写成int *p=&a,一步到位。至于为什莫原语句中定义时是*p,下一步成了p,因为呢*是一个指针标识符,p是定义过的,下面的语句可以直接用。
3.指针的独到之处-----解引用
#include <stdio.h>
int main()
{ int a=9;
int *p=&a;
*p=200;//解引用
printf("%d\n",a);
return 0;
}
上述代码中在定义完指针变量P之后运用的就是指针的解引用,本质上此处的*就是一个间接访问符号,以此访问a的地址,显然这是一条赋值语句,然而a的地址值是不可变的,自然通过访问a的地址间接的将200赋值给了a,通过程序验证a=200
接下来我们来探讨一下二级指针,在定义完一级指针后,如果对其取地址,即&p与interesting**p是对等的,二级指针(在32位平台上指针都是四字节,64位平台为8字节)本质上保存的是指针的地址。写成
int a=39;
int **p=&pp;
*pp=&a;
对于二级指针想要完成改值操作则需要做两次解引用,大致过程为**p--&pp--&a--a