CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

函数的返回值比较困惑

楼主hbcb(青蛙王子)2005-07-18 12:12:42 在 C/C++ / C语言 提问

函数如果有返回值的情况下,返回变量是不是一定要用静态变量呢?如:  
   
  int   test_a(int   i)  
  {  
      int   tmp;                       /*是不是这样不可以,会影响到调用函数的取值?*/  
      tmp=i+1;  
      return(tmp);  
  }  
   
  int   test_b(int   i)  
  {  
      static   int   tmp;         /*有人说要这样,如果静态变量多了,会不会影响效率呢?*/  
      tmp=i+1;  
      return(tmp);  
  } 问题点数:20、回复次数:7Top

1 楼newbiestar()回复于 2005-07-18 12:15:28 得分 3

有关系么?  
   
  static会影响函数的行为的……Top

2 楼foochow(无聊,灌水......)回复于 2005-07-18 12:15:29 得分 3

int   test_a(int   i)  
  {  
      int   tmp;                       /*是不是这样不可以,会影响到调用函数的取值?*/  
      tmp=i+1;  
      return(tmp);  
  }  
  //这个当然可以了,返回了一个拷贝Top

3 楼jsjjms(专心研究嵌入式)回复于 2005-07-18 12:18:35 得分 2

没有什么关系的,都可以用的。不过用  
   
  static的时候要注意变量的变化。Top

4 楼Flood1984(峰子)回复于 2005-07-18 12:33:10 得分 5

int   test_a(int   i)  
  {  
      int   tmp;                       /*是不是这样不可以,会影响到调用函数的取值?*/  
      tmp=i+1;  
      return(tmp);  
  }  
  //这没什么影响,因为在函数的局部变量消失后,还会有一个系统保存的副本存在.  
   
  但是如果:  
  int*   test_a(int   i)  
  {  
      int   tmp;                       /*是不是这样不可以,会影响到调用函数的取值?*/  
      tmp=i+1;  
      return(&tmp);   //返回指向局部变量的指针  
  }  
  //这就不行,  
  因为指针有副本,但其所指向的局部变量已消失.Top

5 楼kgdiwss(∮明天去要饭)回复于 2005-07-18 12:44:02 得分 2

可不是,static会保持上一次的值不变Top

6 楼varphone()回复于 2005-07-18 12:59:02 得分 3

楼上说的是对的,   看下面的代码:  
   
  //   Test.h  
   
  #include   <stdio.h>  
   
  int   stcfunc(int   i);  
   
  int   main()  
  {  
          printf("the   1st   call   stcfunc()   return   =%d\n",stcfunc(8));  
          printf("the   2nd   call   stcfunc()   return   =%d\n",stcfunc(0));  
          system("PAUSE");  
          return   0;  
  }  
   
  int   stcfunc(int   i)  
  {  
  static   int   j;  
  if   (i!=0)   j   =   ++i;  
  return   j;  
  }  
   
  the   result:  
   
  the   1st   call   stcfunc()   return   =9  
  the   2nd   call   stcfunc()   return   =9  
  Top

7 楼zjyu88(刚步入三流大学)回复于 2005-07-18 13:07:24 得分 2

按值传递返回一个局部变量是没问题的,因为会复制一个副本..  
  如果是返回的是指针或引用的局部变量就有问题了,但这问题是  
  一下子无法体现出来的,,不过是很大的隐患...不过编译时会出现警告的..Top

相关问题

  • 关于函数返回值与拷贝构造函数的困惑
  • MSDN中对recv函数返回值的困惑,请高手解惑!
  • 函数返回值???
  • 函数的返回值?
  • 函数返回值问题??????
  • C函数的返回值
  • 函数返回多个值
  • 函数返回值问题
  • RasDial函数的返回值和GetLastError函数的返回值。
  • 关于函数返回值的问题?

关键词

  • 函数
  • 指针
  • stcfunc
  • 局部变量
  • tmp
  • 值
  • 返回
  • 变量
  • 会影响
  • 副本

得分解答快速导航

  • 帖主:hbcb
  • newbiestar
  • foochow
  • jsjjms
  • Flood1984
  • kgdiwss
  • varphone
  • zjyu88

相关链接

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

广告也精彩

反馈

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