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指向的是全局数据区的一段内存地点,所以函数竣事后姑且变量也指向该地点,所以编译器不会提出告诫。但这样的要领是不推荐的。
返回引用:
这中环境的效率最高,它直接返回一个工具,不发生返回值的副本。但同时也要留意制止返回局部引用的环境。