请教: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