zoukankan      html  css  js  c++  java
  • 有关指针的一个小问题——传参和修改

    假如定义一个函数,只有一个指针做参数,如果我们希望通过这个参数获取返回值,怎么来写这个函数?

    一般我们直接想到的会是:

    void GetMemory(char *p)
     {
         p = new char[20];
     }

    然后进行调用:

    Void Test()
     {
         char * str = NULL;
         GetMemory(str);
         strcpy(str,"hello,world");
         cout<<str<<endl;
         delete str;
         str = NULL;
    }

    这种调用是无效的,很有可能会出现乱码,在函数内对形参进行修改并不能真正地修改形参的值,问题就出在GetMemory()函数的形参。

    正确的定义方式是:

    void GetMemory(char *&p)
     {
         p = new char[20];
     }

    这样的话,在函数内对指针分配内存的操作即能正常进行,最后调用Test()函数也能成功输出”hello,world”。这又要说回指针和引用的问题。

    这两者之间区别的讨论网上千千万万,园里也看到有人写得很好的一篇:

    http://www.cppblog.com/mzty/archive/2006/07/07/9531.html

    所以就不再多做介绍了,那篇博文最后一句话总结得很好:

    “函数的参数进行值拷贝,即使传的是指针,也的对指针(即指针里存的地址)的拷贝。”

    不过这位仁兄到最后也是没有详细讲解二维指针的问题,其实对于二维指针(或者指针数组)我也只是懂一点。仅仅是知道怎么使用,但是对于它为什么能够成功地从函数中返回参数感到非常奇怪。希望高手看到这篇渣文能够给予指教。。。。。。

  • 相关阅读:
    nhibernate记事
    关于mysql数据库中,连续签到等连续日期的处理
    记IIS部署https arr urlrewrite
    mybatis Generator
    CGI
    FreedonStudio freertos 内存分配方式选择
    NB模块BC26调试记录
    调试升级程序记录
    最近做的一个嵌入式项目
    4*4键盘扫描程序--去抖加长按
  • 原文地址:https://www.cnblogs.com/nerohwang/p/3481725.html
Copyright © 2011-2022 走看看