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

* 与 & 以及二级指针

作者: 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