zoukankan      html  css  js  c++  java
  • 对于在函数把指针做为参数传入的几点总结

    一.形如void Func(char* ptr)。

    注意这里传进去的是指针的副本,本质上是传值的方式。在函数内部新建一个指针变量,再把ptr指向的值赋给局部指针变量。对局部变量本身地址的任何修改都不会影响到ptr。

     1 int newInt=1;
     2 
     3 void ChangeLoc(int* ptr)
     4 {
     5 ptr=&newInt;
     6 }
     7 
     8 int main()
     9 {
    10 int num=2;
    11 int* ptr=#
    12 cout<<ptr<<endl;
    13 ChangeLoc(ptr);
    14 cout<<ptr<<endl;
    15 }
    16 
    17 /*
    18 结果:
    19 2
    20 2
    21 */

    二.如果要视图在局部变量中修改传入的形参的地址,可使用指针引用或指针的指针方法。

    出处:http://www.cnblogs.com/li-peng/

    使用指针的指针

    展示一下使用指针的指针做为参数

    复制代码
    void func(int **p)
    {
        *p = &m_value;
        // 也可以根据你的需求分配内存
        *p = new int;
        **p = 5;
    }
    
    int main(int argc, char *argv[])
    {
        int n = 2;
        int *pn = &n;
        cout << *pn << endl;
        func(&pn);
        cout << *pn <<endl;
        return 0;
    }
    复制代码

    我们看一下 func(int **p)这个方法

    • p:  是一个指针的指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址
    • *p:  是被指向的指针,是一个地址。如果我们修改它,修改的是被指向的指针的内容。换句话说,我们修改的是main()方法里 *pn指针
    • **p: 两次解引用是指向main()方法里*pn的内容

    指针的引用

    再看一下指针的引用代码

    复制代码
    int m_value = 1;
    
    void func(int *&p)
    {
        p = &m_value;
    
        // 也可以根据你的需求分配内存
        p = new int;
        *p = 5;
    }
    
    int main(int argc, char *argv[])
    {
        int n = 2;
        int *pn = &n;
        cout << *pn << endl;
        func(pn);
        cout << *pn <<endl;
        return 0;
    }
    复制代码

    看一下func(int *&p)方法

    • p:  是指针的引用,main()方法里的 *pn
    • *p:是main()方法里的pn指向的内容。

    三.effective c++:条款31---千万不要返回局部对象的引用, 不要返回函数内部用new初始化的指针的引用

     1 char* out()
     2 {
     3 /*wrong*/
     4 
     5 /*version1
     6 char* array=new char[10];
     7 cin>>array;
     8 return array;
     9 */
    10 
    11 /*version2
    12 string k="hello,world";
    13 return k;
    14 */
    15 
    16 }
  • 相关阅读:
    申论复习路线
    项目管理小拾
    物理隔离卡,双网通用安装
    生成css sprites
    图片压缩
    css预编译 sass
    小杂记
    遮罩层和弹出层(居中)
    布局之并列登高自适应高度解决方案
    slide逻辑
  • 原文地址:https://www.cnblogs.com/lsr-flying/p/4488945.html
Copyright © 2011-2022 走看看