*
: 星号,用来声明指针的;
&
:连字号运算符,定义内存位置;
二级指针
:指向指针的指针。
指针
指针是一个变量,它的值是另一个变量的地址。
我们先声明一个变量:
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;
网友评论