VB难点解析.doc
- 文档编号:232236
- 上传时间:2022-10-07
- 格式:DOC
- 页数:2
- 大小:19KB
VB难点解析.doc
《VB难点解析.doc》由会员分享,可在线阅读,更多相关《VB难点解析.doc(2页珍藏版)》请在冰豆网上搜索。
过程调用时实参与形参数据类型不匹配问题
VB过程调用的参数传递时,要求形参与实参在参数的个数、数据类型、位置要一一对应。
对于参数个数相同、位置对应相对容易理解,但对于数据类型具体如何匹配?
这还要具体分析。
1.实参与形参数据类型相同
如果形参与对应的实参的数据类型完全一致,则不论是“按值传递”还是“按地址传递”的调用,均不会出现问题。
但要注意以下两种情况:
一是实参未定义类型,系统会自动将它定义为Variant类型;二是实参已定义,但定义方法不对。
如:
PrivateSubson(xAsInteger,yAsInteger,zAsInteger)
x=x+1
y=y+1
z=z+1
Printx,y,z
EndSub
PrivateSubCommand1_Click()
Dimj,kAsInteger
i=3:
j=4:
k=5
Callson(i,j,k)
Printi,j,k
EndSub
运行时,会出现右图的编译错误提示。
这里的i未定义类型,虽然通过赋值转换使得变量i的值为整型常量3,但系统自动认为i为变体型,导致与过程中的形参x类型不同;变量j虽然进行了说明,但也没定义类型,因此变量j也还是变体型,错误与i相同。
2.实参与形参数据类型相容
当按照“值传递”时,实参和形参类型可以不同,但必须要能够由实参类型自动转换为形参类型:
(1)数值型可以自由转换为字符串型,转化规则是:
数据直接加上双引号变为数字字符串。
(2)数字构成的字符串可以转换为数值类型,否则会出现“类型不匹配”错误。
(3)只有“True”或者“False”字符串可以转换为逻辑型,转化规则是统一变以True或者False而不论串中的这两个单词的大小写情况。
(4)逻辑型可以自由转换为字符串型,转换规则是True和False分别加上双引号。
(5)逻辑型可以自由转换为数值类型,转换规则是True变为-1、False变为0。
(6)数值类型可以自由转换为逻辑型,转化规则是0变为False、非0变为True。
3.实参与形参数据类型不同
如果实参与形参的数据类型不同,也可以通过类型转换函数将其变为同一数据类型后进行传递。
这些函数很多,如Str、Val、Chr…。
如果这些函数直接用于实参变量中来传递,则实参就变成了表达式,传递的实质是“值传递”;如果将变量通过函数转换后放入另一个变量中,将转换后的变量作为实参传递,则可实现“地址传递”调用。
下面来分析一道实例题目:
在应用程序中用“PrivateSubSub1(XAsInteger,YAsSingle,ZAsVariant)”定义了子程序过程Sub1。
调用过程Sub1的实参变量I,J,K均定义为Integer型、L定义为逻辑型,能用Call正确调用过程Sub1的是哪些?
①Sub1(I,J,K)
②Sub1(I,3.65,K)
③Sub1(3.14,234,L)
④Sub1("245","231.5",J)
⑤Sub1(K,3.65,K)
⑥Sub1(3.14,True,L)
分析:
①实参I,J,K与形参X,Y,Z均为传地址调用。
I和X均为整型可以传递;形参Z为Variant,按照前面观点,虽然与之对应的K是整型,但可以实现传址调用;由于J为Integer、Y为Single,不能实现传地址调用,因此该答案是错误的。
②实参3.65为值,与形参Y匹配时将按值传递,因此该答案正确;
③虽然实参3.14对应的形参X为Integer、实参234对应的形参Y为Single、实参L对应的形参Z为Variant,但由于X和Y都是按照值传递,因此3.14将转化为3、而234可以直接赋给Y,逻辑变量L可以与Z传递,因此该答案正确;
④由于实参“245”和“231.5”均为字符串常量,因此与其对应的形参X、Y将按照值传递,而数字字符串是可以转化为数值类型的,因此该答案正确;
⑤K作为实参,与形参X和Z分别进行两次传地址调用,所以形参X和Z中的任意一个在过程中发生改变,都将影响到K的值,因此该答案也正确;
⑥虽然实参True对应的形参Y为Single,但由于是传值调用,因而True将转化为-1赋给Y,最后的答案应该也是正确的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 难点 解析