请教c++的静态局部变量问题,及其如何运算,

xufei3085 2009-03-18 02:03:07
#include "iostream.h"
void func();
int n=1; //全局变量
void main()
{
static int a; //静态局部变量
int b=-10;
cout<<"a:"<<a
<<"b:"<<b
<<"n:"<<n<<endl;
n+=10;
func();
}
void func()
{
static int a=2;
int b=5;
a+=2;
n+=12;
b+=5;
cout<<"a:"<<a
<<"b:"<<b
<<"n:"<<n<<endl;
}

运行结果为:
a:0 b:-10 n:1
a:4 b:10 n:13
a:0 b:-6 n:13
a:6 b:10 n:35


这结果怎么运算出来的?
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-03-19
  • 打赏
  • 举报
回复
只有2行输出代码,怎么出4行输出了?
至于答案很显然:
main中
a等于多少其实是随机的(虽然每个编译器给的值是固定的,但是逻辑上你应该认为他是随机的,也就是它打印的任何值你都应该认为是合理的)
b=-10
n=1

然后n变为11

func中:
a=4
b=10
n=23

我虽然没有vc6,但是很负责的说2个cout不会打印4行出来,除非你替换了系统的iostream.h
[Quote=引用楼主 xufei3085 的帖子:]
#include "iostream.h"
void func();
int n=1; //全局变量
void main()
{
static int a; //静态局部变量
int b=-10;
cout < <"a:" < <a
< <"b:" < <b
< <"n:" < <n < <endl;
n+=10;
func();
}
void func()
{
static int a=2;
int b=5;
a+=2;
n+=12;
b+=5;
cout < <"a:" < <a
< <"b:" < <b
< <"n:" < <n < <endl;
}

运行结果为:
a:0 b:-10 n:1
a:4 b…
[/Quote]
xufei3085 2009-03-19
  • 打赏
  • 举报
回复
向各位大大道歉,偶已经弄明白了,还有,代码我少写了一段……
xufei3085 2009-03-19
  • 打赏
  • 举报
回复
很负责任的说,我用VC++6.0运算出来的就是这个结果……
ilwmin 2009-03-18
  • 打赏
  • 举报
回复
楼上正解,结果不对
juniosan01 2009-03-18
  • 打赏
  • 举报
回复
你给的运行结果明显是错的
Lovegarfield 2009-03-18
  • 打赏
  • 举报
回复
我觉得你主要不明白的是static变量在全局域和函数域中的作用,static变量的特点是只初始化一次,局部静态变量在推出函数的时候,它所分配的空间不会被回收,下次进入该函数时保存着上次调用后的值。
dzc8866 2009-03-18
  • 打赏
  • 举报
回复
你贴出来的代码和你给的输出结果有点差别,

你可以看下的面程序,或许就知道你想知道的东西了

#include "iostream.h"

void func();
int n=1;

void main()
{
static int a; //这里定义一个静态变量,但是没有初始化,内存中它存在全局区,系统默认值是0

int b=-10;

cout <<"a:"<<a<<" , b:"<<b<<" , n:" <<n<<endl;

func(); //第一次调用函数func,函数中定义静态局部变量a,并且初始化,要注意的是
//1、静态变量第一初始化之后,下次再调用函数,func,就不会执行static int a=2,而是直接读a的值
//2、在函数func中,起作用的是局部静态变量a,main中的不起作用
n+=10;

func();
}

void func()
{
static int a=2;
int b=5;

a+=2;

n+=12;

b+=5;

cout<<"a:"<<a<<" , b:"<<b<<" , n:"<<n<<endl;
}
belldandysai 2009-03-18
  • 打赏
  • 举报
回复
我只看出前两行的运行结果
代码没少吗

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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