您的位置:首页 > 编程语言 > C语言/C++

关于c语言中返回值和返回指针的问题。

2012-04-28 21:16 435 查看

关于c语言中返回值和返回指针的问题。

int  testA  (void)  

 {  

 int  b  =  1  ;  

 return  b  ;  

 }  

 char  *  testB  (void)  

 {  

 char  str[]  =  "abc"  ;  

 return  str  ;  

 } 

int  main()  

 {  

 printf(  "  the  value  of  testA  is  %d  n",  testA()  )  ;  

 printf(  "  the  value  of  testB  is  %c  ",  *(  testB()  )  )  ;  

 } 


  对于返回值的情况:  

  testA与main函数同在栈区,testA结束时C++创建临时变量,然后将返回值复制给该临时  

  变量。  

  printf(  "  the  value  of  testA  is  %d  n",  testA()  )  时输出的是该临时变量的值,testA中的b已经不存在。  

  对于返回指针的情况:  

  这是最复杂的部分。首先,对于上面的情形:返回一个数组的首地址,由于是返回char  *  

  类型,所以C++会首先创建一个char  *类型的临时变量,再把该数组的首地址赋给临时变量;  

  函数结束后该数组也就被销毁,这就意味着临时变量指向了一个“未声明的地址”,幸运的情况下,这段内存暂时还没有被其他的数据所覆盖,因此还能输出正确的内容。  

  在testB里面,如果换成char*  str="abc";return  str;  由于这时str指向的是全局数据区的一段内存地址,所以函数结束后临时变量也指向该地址,所以编译器不会提出警告。但这样的方法是不推荐的。  

  返回引用:  

  这中情况的效率最高,它直接返回一个对象,不产生返回值的副本。但同时也要注意避免返回局部引用的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: