一道VB试题

OptionExplicitPrivateFunctionf(aAsInteger)AsIntegerDimbAsIntegerStaticcAsIntegerb=b+1... Option Explicit
Private Function f(a As Integer) As Integer
Dim b As Integer
Static c As Integer
b = b + 1
c = c + 1
f = a + b + c
End Function
Private Sub Command1_Click()
Dim a As Integer, i As Integer
a = 2
For i = 1 To 3
Print f(a)
Next i
End Sub

完全不明白运行结果为什么是 4、5、6
请大家指教,谢谢!
展开
 我来答
huohua66zhaobo
2011-08-15 · TA获得超过8353个赞
知道大有可为答主
回答量:2555
采纳率:0%
帮助的人:822万
展开全部
你的问题可能是没理解 局部变量里用dim 和 static语句声明变量的区别
1, static:声明的为静态变量,在第一次调用它所在的过程时创建和初始化,当过程结束时,静态变量的存储空间仍然保留,因此静态变量的值可以保持,并从上一次调用传递到下一次调用
2, dim: 每次调用过程时动态创建和初始化,当过程结束时,收回变量的存储空间,因此无法保留变量的值;
下面说下你的程序
由于
Dim b As Integer
Static c As Integer
因此每次调用函数时,b 的值为0(系统默认) c值为上次处理后的结果 每一次为0 第二次为1(也就是第一次处理后的结果,注意第二次处理后c的值为2) 第三次为2
下面我说下三次调用 a,b ,c值
次数 a b c 结果
1 2 1 1 4
2 2 1 2 5
3 2 1 3 6
天行健
2025-06-12 广告
六西格玛培训机构哪家好?找18年六西格玛管理咨询品牌(天行健管理咨询),在北京、上海、广州、深圳等开设过上1000门课程,老师都拥有驻厂实战经验,理论+实战更有保障,参加天行健培训的六西格玛培训,学员考证通过超过90%!... 点击进入详情页
本回答由天行健提供
pals
2011-08-15 · TA获得超过1044个赞
知道小有建树答主
回答量:1307
采纳率:0%
帮助的人:390万
展开全部
因为b和c为内部变量,没有赋初值,默认为0。因为c为Static,所以退出function后c的地址仍保留,即c的值不清空,所以在command1_click中调用f时,c的值每次增加1.

所以a的值在f中每次增加1,出现结果为4、5、6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3c3b599
2011-08-15 · TA获得超过146个赞
知道小有建树答主
回答量:279
采纳率:100%
帮助的人:377万
展开全部
Static c As Integer
它是将c值存到内存中的,相当于全局变量一样,第一次调用时c=1,第二次c=2,第三次c=3,所以结果都+1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
保晏然0i6
2011-08-15 · TA获得超过307个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:129万
展开全部
Print f(a)
显示 函数f 的返回值
函数f 在这。。 Private Function f(a As Integer) As Integer

Dim b As Integer
Static c As Integer
b c 的初始值为0 即b=0 c=0

i=1 时
function f(a) 里:
b = b + 1 ‘ b=1
c = c + 1 ’ c=1
f = a + b + c ‘ f=4
返回
所以 i=1时 f(a)=4
然后。。 被print出来。。

有必要说下Static 和 dim
Static只能在sub或function过程中使用,在退出sub或function过程后变量的值保留
dim 不保留

所以
i=2 时
function f(a) 里:
b = b + 1 ‘ b=0+1 b是dim声明的
c = c + 1 ’ c=1+1 static的
f = a + b + c ‘ f=5

应该说清楚了。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式