首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问:C和指针下面的题

2012-09-04 
请教:C和指针上面的题#includestdio.hint func(void){static int counter1return ++counter}int main

请教:C和指针上面的题


#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新手,太简单的解释还要再问你们

[解决办法]
静态局部变量在程序执行到该对象的声明处时被首次初始化,以后的函数调用不再进行初始化
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值
这个运行结果是
answer = 2 - 3 * 4;
[解决办法]
因为static有记忆功能 只初始化一次 后面的调用中都会在上一次基础上变化 func()-func()*func();第一次为2 第二次得3 第三次为4 所以2-3*4=-10

[解决办法]
原因就是在这个语句上 static int counter=1;
static变量存储在静态内存中,所以每次 ++counter操作都是在原来counter值得基础上进行的。
answer=func()-func()*func(); // 2-3*4=-10

热点排行