• 真正明白C语言二级指针(转载)


    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是....

    但是可能大家比较不容易理解的是,二级指针或者多级指针用在哪里呢?怎么使用呢?有没有必要用呢?

        现在我就谈谈C指针的比较经常用到的地方:

    我们都知道C语言中函数传递参数都是传递"值"的,如下:

    void fun(void)

    {

         int tmp = 0;

         change(tmp);

         printf("################ tmp = %d /n");

         return ;

    }

    void change(int tmp_t)

    {

       tmp_t =1;

       return;

    }

    这个时候fun()中打印出来的tmp值还是0,因为我们传递的是“值”,如果你想在函数change()中修改这个tmp的值能在fun()中生效的话,那么就需要用指针来传递了如下:

    void fun(void)

    {

         int tmp = 0;

         change(&tmp);

         printf("################ tmp = %d /n");

         return ;

    }

    void change(int *tmp_t)

    {

       *tmp_t =1;

       return;

    }

    这个时候fun()中打印出来的tmp值就是1了,因为我们此时传进来的是tmp的地址,所以我们在change()中tmp_t就是tmp的地址了,而对于*tmp_t的操作其实就是对tmp的操作了。

    到这里的时候我们可以试想一下,我们通过传递指针来达到修改一个值的目的,那么当你需要修改一个指针的时候呢,这个时候我们就需要指针的指针了,如下:

    int fun(void)

    {

         int *buf ;

         int ret ;

         ret = mem_init(&buf);

         return ret;

    }

    int mem_init(int **buf_t)

    {

      *buf_t = malloc(100);

      return 1;

    }

    通过上面我们可以发现,fun()函数通过调用men_init()函数来实现给buf分配内存空间的目的。首先buf是我们定义的一个指针,&buf则是指向buf的指针(二级指针),我们通过把&buf传递个men_init()函数,那么此时二级指针buf_t=&buf了,所以说buf_t是指向buf的指针,那么对于*buf_t的操作其实就是对buf的操作了,这样fun()就可以通过men_init()来分配内存了。

    (补充一点:对于定义的int **buf_t中,二级指针buf_t=&buf,指向为buf(还是一个指针),一级指针*buf_t=buf,指向为*buf,

    值**buf_t= *buf)

    对于n级指针的使用也是差不多这样了

  • 相关阅读:
    Servlet Filter过滤器执行顺序
    eclipse乱码问题
    如何查看servlet&jsp版本?
    Unity的shader学习2
    Unity的shader学习1
    后缀数组专题与代码模板
    哈希表/散列表 指针版模版
    图的连通性专题及模板
    一般图最大匹配--带花树
    7-15至7-17训练赛回顾
  • 原文地址:https://www.cnblogs.com/la0bei/p/3594966.html
Copyright © 2020-2023  润新知