函数的返回值比较困惑
函数如果有返回值的情况下,返回变量是不是一定要用静态变量呢?如:
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




