CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道c++指针题,高手请进!

楼主sleepsheep(blue)2001-02-16 13:16:00 在 C/C++ / C语言 提问

int*   test(int*   c)  
  {  
  c=new   int(10);  
  return   c;  
  }  
   
  int   main()  
  {  
  int*   gc=0;  
  int*   c=0;  
  gc=test(c);  
  cout<<c<<endl;  
  cout<<gc<<endl;  
  return   0;  
   
  } 问题点数:60、回复次数:14Top

1 楼kingofwang(王中王)回复于 2001-02-16 13:31:00 得分 0

结果应该是C和GC的值相等吧?问题在哪?Top

2 楼xzjxu(糊涂神仙)回复于 2001-02-16 13:42:00 得分 0

语法错!c不能被附值Top

3 楼ed9er(始祖鸟)回复于 2001-02-16 13:51:00 得分 0

这个要是运行了以后不出内存异常访问就奇怪了Top

4 楼ed9er(始祖鸟)回复于 2001-02-16 13:53:00 得分 0

哦,60分啊,你c进去的时候是值传递,出来时main的c值没变,还是0Top

5 楼NowCan(城市浪人)回复于 2001-02-16 13:56:00 得分 0

怎么能对指针直接赋值呢????Top

6 楼ed9er(始祖鸟)回复于 2001-02-16 13:57:00 得分 0

看错了,是c不是*c,不会内存出错Top

7 楼xu_feng(枫子)回复于 2001-02-16 14:22:00 得分 0

c=new   int(10);  
  int   作为一种数据类型,可以定义其它变量的类型,也可以作为一种强制转换函数。  
  c作为指针类型的变量,在test(int   *   c)中已经被定义。而c=new   int(10)是将动态分配的int(10)的地址传給c,上面的test()函数只是返回int(10)的地址.下面的主程序十分简单。Top

8 楼idealwt(空气鱼)回复于 2001-02-16 14:36:00 得分 0

果然!  
  加上一句:printf("%d",*gc)  
  出现了10。Top

9 楼mzikey()回复于 2001-02-16 14:37:00 得分 0

动手不就知道了吗!  
  c的值还是0  
  gc的值是分配的新地址  
  (vc6下)Top

10 楼NowCan(城市浪人)回复于 2001-02-16 14:50:00 得分 0

值不确定Top

11 楼liu_se()回复于 2001-02-16 15:37:00 得分 20

c的值为0,gc为指向10的一个地址。  
  因为test()是传递值,所以main()中的c不变。  
  如果是int   *   test(int*&   c),c和gc就相等了。Top

12 楼hello_wyq(半瓶墨水)回复于 2001-02-16 16:24:00 得分 40

我在前人的基础上补充两句:  
  1)C的值应该是0,而gc的值是指向分配的存储单元的首地址。如果你要传地址也可以如下:  
        //在此处你的main函数中的test方法应为gc   =   test(&c);  
        int*   test(int**   ptr)   {  
              *ptr   =   new   int(10);  
              return   *ptr;  
        }  
        或  
        int*   test(int*&   ptr)   {  
              ptr   =   new   int(10);  
              return   ptr;    
        }  
  2)这个程序有严重的缺陷,就是内存丢失!一个比较好的办法是:  
        void   test(int*   ptr)   {  
            //do   something;  
        }  
   
        int   main()   {  
              int*   c   =   0;  
              int*   gc   =   0;  
              c   =   new   int(10);  
              assert(c   !=   0);  
              //do   something   ;  
              test(c);  
              //do   something;  
              delete   c;  
              c   =   0;  
              //do   something;  
         
          }  
  不管是编什么程序都应该有一个良好的编程习惯,这样才能在做大东东时不会有太多的隐藏的祸患。上面仅是我的个人意见,如果有什么不对的地方,恳请指教!Top

13 楼cppfan(易得糊涂)回复于 2001-02-16 23:40:00 得分 0

呵呵,那不如改用auto_ptr算了。  
  #include   <memory>  
  using   namespace   std;  
      void   test(int*   ptr)   {  
    //do   something;  
  }  
        int     main(void){  
                      auto_ptr<int>   p(new   int(10);  
                      test(p.get());  
                      return   0;  
  }Top

14 楼Rio(IT工人)回复于 2001-02-23 11:49:00 得分 0

无非是引用参数与内存释放的问题!就这么两件事儿Top

相关问题

  • C++指针问题
  • C++指针问题
  • C指针的难题???
  • c++的指针问题?
  • C#中的指针问题!
  • c指针的问题!
  • C++ 函数指针问题?
  • c中的指针问题
  • c++指针的问题
  • C#中的指针问题。

关键词

  • gc
  • ptr
  • test
  • main

得分解答快速导航

  • 帖主:sleepsheep
  • liu_se
  • hello_wyq

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo