50分只给一人。

hohidl 2007-07-03 09:28:19
以下程序中static定义的静态变量还是弄不清他是怎么起作用的,麻烦各位说的简明点。
#include <stdio.h>
#include <stdlib.h>
int n=1;
void func()
{
static int x=4;int y=10;
x+=2;
n+=10;
y+=n;
printf ("FUNC :x=%2d y=%2d n=%2d\n",x,y,n);
}
int main()
{
static int x=5;
int y;
y=n;
printf ("MAIN :x=%2d y=%2d n=%2d\n",x,y,n);
func();
printf ("MAIN :x=%2d y=%2d n=%2d\n",x,y,n);
func();
system ("PAUSE");
return 0;
}
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hohidl 2007-07-03
  • 打赏
  • 举报
回复
哦!明白了,多谢!
believefym 2007-07-03
  • 打赏
  • 举报
回复
static int x=4;int y=10;

等价于
static int x=4;
int y=10;

而不是
static int x=4;
static int y=10;

"要注意函数里的y不是static的"
hohidl 2007-07-03
  • 打赏
  • 举报
回复
程序中不加static 也能得出此结果,加了之后也是这个结果,只有当在MAIN函数中把y定为static才会出现42,中间y的运算方式还是不明白。
hohidl 2007-07-03
  • 打赏
  • 举报
回复
我就是不明白为什么是31,而不是42?y的值在前面不是已经变为21了么,x在前面都已经是6了,在后面又加了2,为什么y在这里不加呢?
believefym 2007-07-03
  • 打赏
  • 举报
回复
static的,就是只会初始话一次,第二次进来不会重新初始化
还有一个就是变量作用域的问题,x和y在main和func函数都有,所以要区别开来
believefym 2007-07-03
  • 打赏
  • 举报
回复
1.printf ("MAIN :x=%2d y=%2d n=%2d\n",x,y,n);
输出5 1 1没问题吧

2,printf ("FUNC :x=%2d y=%2d n=%2d\n",x,y,n);
x=4+2=6,n=n+10==1+10=11,y=y+n==10+11=21
所以输出6 21 11

3,printf ("MAIN :x=%2d y=%2d n=%2d\n",x,y,n);
这里x还是main里的x,当然还是5,y还是main里的y,当然还是1,n已经在fun函数里i改变成为11
所以输出5 1 11

4,printf ("FUNC :x=%2d y=%2d n=%2d\n",x,y,n);
x是static的,所以x是fun函数内部的x,已经为6,然后重复第二步的操作
x=6+2=8,n=n+10==11+10=21,y=y+n==10+21=31
所以输出8 31 21


要注意函数里的y不是static的

33,311

社区成员

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

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