请教:C和指针上面的题

Ubunman 2012-08-24 11:40:44


#include<stdio.h>

int func(void)
{
static int counter=1;

return ++counter;
}

int main()
{
int answer;

answer=func()-func()*func();

printf("%d\n",answer);
}


我要的是geany工具,操作系统是linux。
为什么编译运行以后答案是:-10

求各位大神给出详细解释,我是C新手,太简单的解释还要再问你们
...全文
89 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤雨 2012-08-25
  • 打赏
  • 举报
回复
因为count是static定义的 第一次返回2 即count==2
再调用函数count又自增1 此时count==3
然后第三次调用count == 4
所以answer=2-3*4
huangdancs 2012-08-25
  • 打赏
  • 举报
回复
原因就是在这个语句上 static int counter=1;
static变量存储在静态内存中,所以每次 ++counter操作都是在原来counter值得基础上进行的。
answer=func()-func()*func(); // 2-3*4=-10
huangdancs 2012-08-25
  • 打赏
  • 举报
回复
原因就是在这个语句上 static int counter=1;
static变量存储在静态内存中,所以每次 ++counter操作都是在原来counter值得基础上进行的。
answer=func()-func()*func(); // 2-3*4=-10
huangdancs 2012-08-25
  • 打赏
  • 举报
回复
原因就是在这个语句上 static int counter=1;
static变量存储在静态内存中,所以每次 ++counter操作都是在原来counter值得基础上进行的。
answer=func()-func()*func(); // 2-3*4=-10
Ubunman 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
提示我回复过了 怎么显示不了
[/Quote]
我看你回复了,却看不见,不知道为什么。

已经明白了,谢谢
xcyl 2012-08-25
  • 打赏
  • 举报
回复
提示我回复过了 怎么显示不了
kingkeven 2012-08-25
  • 打赏
  • 举报
回复
count是临时变量,当return的时候,以将变量回收,应该是传不值的???
[Quote=引用 3 楼 的回复:]

因为static有记忆功能 只初始化一次 后面的调用中都会在上一次基础上变化 func()-func()*func();第一次为2 第二次得3 第三次为4 所以2-3*4=-10
[/Quote]
SKATE11 2012-08-24
  • 打赏
  • 举报
回复
因为static有记忆功能 只初始化一次 后面的调用中都会在上一次基础上变化 func()-func()*func();第一次为2 第二次得3 第三次为4 所以2-3*4=-10
Ubunman 2012-08-24
  • 打赏
  • 举报
回复
为什么提示有回复却看不见呢???
xcyl 2012-08-24
  • 打赏
  • 举报
回复
静态局部变量在程序执行到该对象的声明处时被首次初始化,以后的函数调用不再进行初始化
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值
这个运行结果是
answer = 2 - 3 * 4;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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