static变量作为函数的返回值怎么处理?

dino_liuyu 2010-03-24 10:37:22
代码如下,sn打印正确,sum打印不对,请大家指教

int add(int num)
{
static int sn;
if(num == 0)
return sn;
sn += num;
printf("num = %d, sn = %d\n", num, sn);
add(--num);

}

int main(void)
{
int sum;
sum = add(100);
printf("sum = %d\n", sum);

return 0;
}
...全文
700 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
东大坡居士 2010-03-24
  • 打赏
  • 举报
回复
递归吗
int add(int num)
{
static int sn;
if(num == 0)
return sn;
sn += num;
printf("num = %d, sn = %d\n", num, sn);
add(--num);

}
如果num不为0,返回的结果为add(num-1),然后再递归下去
batoom 2010-03-24
  • 打赏
  • 举报
回复
因为最上层add返回的是不确定数,最深的add才返回的是sn
dino_liuyu 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mstlq 的回复:]

C/C++ code

#include <stdio.h>

int add(int num)
{
static int sn;
if(num == 0)
return sn;
sn += num;
printf("num = %d, sn = %d\n", num, sn);
return /*注意return*/add(--num)……
[/Quote]

加上return之后确实正确了,您可以具体讲讲这个细节吗?
xxf012005 2010-03-24
  • 打赏
  • 举报
回复
显然是5050
mstlq 2010-03-24
  • 打赏
  • 举报
回复

#include <stdio.h>

int add(int num)
{
static int sn;
if(num == 0)
return sn;
sn += num;
printf("num = %d, sn = %d\n", num, sn);
return /*注意return*/add(--num);

}

int main(void)
{
int sum;
sum = add(100);
printf("sum = %d\n", sum);

return 0;
}
dino_liuyu 2010-03-24
  • 打赏
  • 举报
回复
我加了打印语句sum的结果不是5050
cy330206 2010-03-24
  • 打赏
  • 举报
回复
楼主用的是递归,,但是我看不出楼主说的问题,,来,,难道我。。。
cy330206 2010-03-24
  • 打赏
  • 举报
回复
楼主哪里不对了。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧