zoukankan      html  css  js  c++  java
  • 二级指针

    记住两句话,函数传递有值传递和地址传递,要想修改某个内容的值,必须传递指向这块内容的地址。

    这就引起了关于指针的最基本的两个内容:是修改指针还是修改指针指向的值,

    前者需要将指针的地址(也就是二级指针呗)传递给函数,后者则只需要指针本身即可。

    要想在函数中修改他们的值,就要传递他们的地址。

    例1:

    void foo(char* p)  
        {  
            p++;  
        }  

      问,在这个函数执行完,返回之后,p的值会被改变吗?

    答案是否,因为我们传递指针的目的是为了修改指针指向的地址的值,而不是指针的值,

      那么,如果想在函数里修改指针的值该怎么做?只要把指向指针的指针传进来就可以了

    如下

    void foo(char** p)  
    {  
        *p++;  
    }  
      
    foo(&pointer); 

        例2:

        char str[10] = "wang" 
        void change(char *p) 
        { 
            p = str; 
        } 
        int main() 
        { 
            char *p = NULL; 
            change(p); 
        printf("%s",p);//打印出来应该还是空,不会是wang.
        } 

    我们想在函数change()中改变指针p的值(记住:是指针p的值,而不是p所指向的地址的值)。问什么不能实现呢?首先,函数的参数是char *p,我们可以改变 *p,但改变不了p本身。

       说得易懂点就是,是把p改变了,但改变的是函数中的局部变量p,当函数结束时,局部p被释放了,其实也只是主函数p的一个拷贝,所以没有改变。

    要想改变,就要用到上面所以写的方法,传递二维指针,例子修改一下,e.g:

        void change(char **p) 
        { 
            *p = na; 
        } 
        int main() 
        { 
            char *p = NULL; 
            change(&p); 
            printf("%s",p)//这回打印出来的就是wang了。 
        } 
  • 相关阅读:
    Tomcat配置JMX远程监控(Windown7 Linxu)
    Maven Tomcat:run 使用tomcat7
    关于C3P0容错和自动重连特性的研究
    密码算法记录
    Linxu 安装Nignx
    Linxu Yum方式安装Mysql
    Linxu
    tomcat结合nginx使用小结
    Tomcat性能优化(三) Executor配置
    深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9295033.html
Copyright © 2011-2022 走看看