美文网首页
* 与 & 以及二级指针

* 与 & 以及二级指针

作者: Vergil_wj | 来源:发表于2019-05-10 13:58 被阅读0次

*: 星号,用来声明指针的;

&:连字号运算符,定义内存位置;

二级指针:指向指针的指针。

指针

指针是一个变量,它的值是另一个变量的地址。

我们先声明一个变量:

int var = 20;

再声明一个指针:

int *p = &var; 

其中 p 是指针变量名称,它的值指向的是 var 的地址。

我们打印输出一下:

int var = 20;

int *p = &var;

NSLog(@"%d,%d",var,*p);

NSLog(@"%p,%p",&var,p);

结果:

20,20
0x16fc37ecc,0x16fc37ecc

*p 与 p

从上面例子可以看到,如果我们不理解指针的含义的话,表面上看 *p 应该和 &var 相等才对啊,可实际上是 p 和 &var 相等,*p 和 var 相等。我们再看下指针定义:指针是一个变量,它的值是另一个变量的地址,而 * 星号是用来声明指针的。所以 上面例子中 p 是指针,p 的值为 var 的地址即 &var。

那 *p 又是什么?

*p 就等于 p 中存储的地址(&var)所对应存储单元中的数据 20。

来张图理解下:

其中每个变量和指针也有自己的地址,变量 var 和指针 p 的地址为 0x16fc37ecc 和 0x16fc37ec0。

二级指针

二级指针就是指向指针的指针,它的值就是指向指针的地址。例如:

int var = 20;
int *p = &var;
int **p2 = &p;

其中 p2 就是二级指针,可见其中有两个*。同理三级指针就有三个*,四级指针就有四个*,依次类推。

他们之间的关系可用下图来表示:

由此图很容易得出:

p2 的值为 0x16fc37ec0;

*p2 的值为 0x16fc37ecc;

**p2 的值为 20;

相关文章

网友评论

      本文标题:* 与 & 以及二级指针

      本文链接:https://www.haomeiwen.com/subject/ylpooqtx.html