美文网首页我爱编程
C语言指针的复杂声明

C语言指针的复杂声明

作者: 王伯卿 | 来源:发表于2018-05-28 22:02 被阅读0次

    前记:最近因为离职有很多很多事情,有些郁闷,导致一直没有更新和学习。

    这篇看了好多文章,所以搁浅了很久很久。
    现在终于明白了,终于可以来记录自己的学习成果了。
    让我们先写一个简单的例子

      int i = 5;  /*声明一个变量*/
      int * ptr;  /*声明一个指针*/
      ptr = &i;  /*将变量i的地址赋值给指针变量*/
      *ptr = 2;  /*通过指针定位到某一个地址的值,将2赋值给它*/
    

    这里的雪花号*,有两个作用,一是用在声明语句中,表示声明的是指针。另外是在赋值中,表示取指针的内容。

    这里在说说 & 和 * 的区别。&表示取地址,和*表示取值,是完全不一样的。

    然后让我们写一个稍复杂的例子。

      int num = 1; /*声明一个变量*/
      int *ptr_1 = #  /*声明一个指针(地址),将num的地址赋值给ptr_1*/
      int **ptr_2; /*声明一个指针的指针(地址的地址)*/
      ptr_2 = &ptr_1; /*将该指针(地址)的地址赋值给指向地址的指针*/
      **ptr_2 = 2; /*将2赋值给指针的地址上的值*/
    

    这边的注释太过复杂。但其实并不会困难。

    如果是一个指针,他必须会有指向的类型。
    因此我们思考一下这个问题,如果是指针,他指向什么类型。

    1. *ptr 这个说明ptr是一个指针(地址),那这个地址代表的值是什么类型。
    2. **ptr 这个就可以回答上面的问题,ptr这个地址代表的值的类型是一个指针(地址)。那这个地址代表的值的类型是什么类型。
    3. int **ptr 这个就可以说明,地址上的地址所代表的值就是int类型的。

    因此ptr是一个指向指针B的指针A,其中指针B指向的变量类型是int类型。


    1.png

    然后是一个较为复杂的例子

    char (*(*x())[])();
    
    1. x()为一个函数,那这个函数返回值是什么呢?
    2. *x(),这个函数的返回值是一个指针,那这个指针指向的类型是什么呢?
    3. (*x())[]这个指针指向一个数组,那数组的元素类型是什么呢?
    4. char (*x())[] 数组的类型是char类型,搞定!

    相关文章

      网友评论

        本文标题:C语言指针的复杂声明

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