指针的初识和解引用
让我们来 看一下以下的代码
int a=10;
int b=20;
int *p= &a;
*p=10;
p=&b;
*p=200;
p=&a;
int **pp=&p;
*pp=&a;
**pp=1000;
*pp=&b;
**pp=2000;
看到这样的代码是不是一脸的懵逼,现在让我们来看看他的每一句都是什么意思。
开始之前我们先了解一下指针和解引用。
指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(pointsto)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。当然这是官方语言,(通俗说;指针就是地址,可以通过它找到以它为地址的内存单元)
解引用 "*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解"就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为"解引用”。
接下来我们来看看每一句都是什么意思。
int *p= &a; //定义一个整型指针p 并且p指向了a的地址 (&取地址)
*p=10; //解引用, 即 给a赋值10;
p=&b; // p指向了 b的地址
*p=200; //解引用, 即 给b赋值200;
p=&a; // p指向了a的地址
int **pp=&p; // 定义一个整型的指针 pp 并且pp 指向了 p的地址
*pp=&a; // pp指向了p的地址 p指向了a的地址 即pp指向了a的地址
**pp=1000; //解引用,即给a赋值1000;
*pp=&b; // pp指向了p的地址 p指向了b的地址 即pp指向了b的地址
**pp=2000; //解引用, 即 给b赋值1000;
这里我们需要注意一下 在定义是*p 代表的是,定义一个指针,而其他的时间都是 解引用。