首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

c语言——返回值和返回指针的问题

2008-12-14 
testA与main函数同在栈区,testA结束时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指向的是全局数据区的一段内存地址,所以函数结束后临时变量也指向该地址,所以编译器不会提出警告。但这样的方法是不推荐的。

  返回引用:

  这中情况的效率最高,它直接返回一个对象,不产生返回值的副本。但同时也要注意避免返回局部引用的情况。

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行