找回密码

碧海潮声大学生网

查看: 1042|回复: 0
打印 上一主题 下一主题

从零开始学VB 献给想学习VB的朋友们 第二篇 变量、声明、数组

[复制链接]
跳转到指定楼层
1#
发表于 2006-9-4 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本篇会加入一些vb入门之后需要了解的东东,看不懂不要紧,能记住尽量记住,记不住起码在心里要有个印象,学到后面可以翻回来看看。

vb中的数据类型    标示符        占用空间(字节)           范围
boolean(布尔型)   无           2                  true 或 false
byte(字节型)     无           1                  0~255
integer(整型)    %           2                  -32768~32767
long(长整型)      &            4              -2147473648~2147483647
single(单精度型)  !            4        -3.402823E+38~1.401298E+45和
                                  +1.401298E-45~+3.402823E+38
double(双精度型)   #            8    -1.797693134862315D+308~-4.94066D+324和
                              +4.94066D-324~+1.767693134862315D+308
currency(货币型)  @            8  -922337203685477.5808~+922337203685477.5807
date(日期型)     无           8          100年1月1日~9999年12月31日
string(字符串)    $  10+串长(变长)串长(定长) 0~约20亿(变长)1~约65400(定长)
object(对象型)    无           4              任何对象的引用
variant(变体)    无  22+串长(字符)16(数值)  同变长string或同double

关于string类型:
string类型分为变长和定长两种,变长声明为dim MyStr as string,定长声明为dim MyStr2 as string *10,变长字符串长度可变,定长不可变,当MyStr2="abc"时,由于"abc"只有3位,vb将用空格补足剩下的7位,当MyStr2="abcdefghijklmnopq"时,由于超出了10位,10位后的将被截去

stirng直接的连接使用+或&,建议使用&连接字符串,这样可以使编码更易读
MyStr="abc" & Str2 & "fff"  其中Str2="kkk" 则连接后MyStr为"abckkkfff"

vbcrlf是一个常用的预定义常量,用于换行

高级:string类型用于以A结尾api作参数传递时,vb会自动将unicode的字符串(vb中的字符串都是unicode)转换为ansi,stirng类型变量作为参数传递给api时,实际传递的是string的指针,所以byval Str1 as string这样的声明也可以Str1有api写回的返回值。

关于变量名:
必须字母开头,必须中间没有空格,不能使用关键字,不分大小写,但建议采用易读的方式:
STARTTIME或starttime就不如StartTime易读

通常在模块级变量前加m,全局变量前加g……

关于声明
dim 变量 as 类型       局部变量
private 变量 as 类型    私有变量
public 变量 as 类型     全局变量
static 变量 as 类型     静态变量

vb中并不要求一定要进行变量声明,当使用未声明的变量时,vb将其声明为变体,由于变体占用较多的内存,以及处理变体比处理其他类型变费时,所以强烈建议变量使用前声明,同时这样也可以防止很多错误的发生

工具菜单-选项-要求变量声明选中,将在代码通用部分加入Option Explicit,这将强制变量声明,使用未声明变量将报错,建议选中

声明和使用变量时as 类型和标识符不能冲突,例如dim Var$ as long 是不行的,同样dim Var as long 使用时在Var后面加了不是&的标示符都是不行的

dim a,b,c as long=dim a as variant,b as variant,c as long,也就是说只有c是long型,a和b都是变体,这与其他语言有区别

dim a=dim a as variant未指明类型将被声明为变体

声明后string类型初值为空串"",数值类型为0,boolean为false(也是0嘛)

数组:

dim 数组名 ([lower to] upper,[[lower to] upper]) [as type]
[]内为可选内容,lower默认为0,as type不指定则为变体
一维数组
dim Arr(10) as long
包括Arr(0),arr(1),Arr(2),Arr(3),Arr(4),Arr(5),Arr(6),Arr(7),Arr(8),Arr(9),Arr(10)
11个元素
二维数组
dim Arr2(10,20) as long

动态数组
dim Arr3() as long
使用redim重新分配内存
redim Arr3(5) as long
可以在redim后面加上preserve关键字,这样可以保护已有数据,比如
dim MyArr() as long
redim MyArr(2) as long
MyArr(1)=1
MyArr(2)=2
redim MyArr(5) as long
这时MyArr(1),MyArr(2)的值就都没了,redim preserve MyArr(5) as long,就可以保护这些数据
但是如果数组空间变小了,被删的数据就丢了,
只有最后一维可以修改上限

由于数组在内存中是连续存放的,所以在给api传数组时可以byref Arr(0)这样把数组第一个元素的地址传过去。

当数据类型相同,左边数组为动态数组时可以
NewArr=OldArr这样copy数组(方便哈)


好了,我们看看那个枚举素数的程序
Dim Arr() As Double
Dim Zhishu As Boolean
Dim i As Double
Dim CurNum As Double
Dim j As Double
Dim ArrCount As Double
Dim OutArr As String

Zhishu = True
ReDim Arr(1 To 1)
Arr(1) = 2
ArrCount = 1
这几句应该都明白了吧
i和j通常用于循环计数器,当然你也可以用别的
之所以我们要定义一个Arr()来存放找到的质数,而不是把找到的质数仅仅放在OutArr里,因为对于任意给定的数n,如果它不能被小于n^0.5的任一个质数整除,那么它就是质数,我们不必把所有小于n的数都试一遍

下次将条件,循环,欢迎下次再来
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋| 碧海潮声大学生网  

Copyright © 2001-2013 Comsenz Inc.   All Rights Reserved.

Powered by Discuz! X3.2( 浙ICP备11026473号 )

快速回复 返回顶部 返回列表