关于static修饰变量的作用范围(20分)

zc0001 2004-03-29 04:44:03
代码如下:
#include <iostream.h>
#include <stdlib.h>

int i = 1;

void main()
{
int i, j;
int reset();
int next(int);
int last(int);
int newa(int);
i = reset();
for (j = 1; j <= 3; j++)
{
cout << i << j << endl;
cout << next(i) << endl;
cout << last(i) << endl;
cout << newa( i + j ) << endl;
}
}
int reset()
{
return (i);
}
int next(int j)
{
return (j = i++);
}
int last(int j)
{
static int i = 10; //就是这里
return (j = i--);
}
int newa(int i)
{
int j = 10;
return (i = j += i);
}
谁能讲一下last中i的作用范围,并写出运行结果?
...全文
110 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzygod 2004-03-29
  • 打赏
  • 举报
回复
进程全局的
littleeagle007 2004-03-29
  • 打赏
  • 举报
回复
不好意思啊,刚才看错了
结果应该是:
1,1
2
9
12
11,2
12
9
23
21,3
22
9
24



littleeagle007 2004-03-29
  • 打赏
  • 举报
回复
1 ,1
2
9
1, 2
1 ,2
1,2
2
9
1,3
1,3
2
9
1,4
黄有才 2004-03-29
  • 打赏
  • 举报
回复

引用: ljfwarrior(我爱Java) ( ) 信誉:100 2004-03-29 17:49:00 得分:0

--------static的作用域是程序运行的全过程。
引用: wencal(灰色的雪) ( ) 信誉:100 2004-03-29 17:55:00 得分:0

--------static定义的是静态数据或者函数成员,具有全局的作用域


-------------------我认为你们的说法是错的:-----------------------
作用域分5种:

1.程序级的
2.文件级的
3.类级的
4.函数级的
5.块级的....

在这个函数里:
int last(int j)
{
static int i = 10; //就是这里
return (j = i--);
}
static 是函数级的....它的作用不是全局的...而是在这个函数里.....(内部静态变量)

但有一个问题要注意:
内部静态变量的寿命是长,直到程序完为止.....
这就存在着可见性和存在性的不一致..........
在上面的函数中static int i=10 这个i的存在性是长期的....
但只能在这个函数里才可见........




Kingxinyu 2004-03-29
  • 打赏
  • 举报
回复
同意 zouxueping(阿平) 的说法
wencal 2004-03-29
  • 打赏
  • 举报
回复
static定义的是静态数据或者函数成员,具有全局的作用域
ljfwarrior 2004-03-29
  • 打赏
  • 举报
回复
static的作用域是程序运行的全过程。
mrubbish 2004-03-29
  • 打赏
  • 举报
回复
right!
zouxueping 2004-03-29
  • 打赏
  • 举报
回复
i的作用范围就在last函数内,但它是静态变量,生存期跟全局变量一样,所以第二次运行last函数时不再重新分配i,而是用上次的运行结果9,程序运行结果如下:
1 //i
1 //j
1 //next(i)
10 //last(i)
12 //newa( i + j )
1
2
2
9
13
1
3
3
8
14
junnyfeng 2004-03-29
  • 打赏
  • 举报
回复
应该显示10,9,8 吧

last内用它自己里面定义的i值啊

65,186

社区成员

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

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