登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

miaozk2006

点滴积累与收藏:关于技术,关于生活

 
 
 

日志

 
 

深入了解VB中的变量和指针  

2013-03-12 10:05:43|  分类: 编程-VB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前言:我们都知道,在VB中,可以使用VarPtrStrPtrObjPtr来获得变量的地址,它们之间有什么区别和联系呢?许多资深的VB人员告诉我们,最好将API函数声明中ByVal lpstr As String改为ByVal lpStr As Long,这又是为什么呢?如何正确地利用这些函数向API传递指针呢?

    首先,我们来了解一下VB中的变量及其定义。

    也许你会说我多此一举,如此简单的问题,还需要我来解释吗?

    其实不然。

    现在假设有以下语句:

    Dim i As Long

    它表示什么呢?它表示我们定义了一个名称为a且类型为Long的变量。然而对于内存来说,即没有名称,也没有类型,只有用数字数字表示的地址和连续所占用地址的数量。由于Long为4个Byte大小,因此,我们可以把这条语句看作程序对系统的内存管理器说,俺想在地址a上使用大小为4Byte这一段连续地址,然后准备在这段地址里放点东西,当然,俺的东西不会超过4Byte的。

    再看一下这条语句:

    Dim s As String

    它又表示什么呢?直白地说,它表示我们定义了一个名称为s且类型为String的变量。现在麻烦的是,String的大小是不确定的。如果程序还像上一条语句一样直接告诉系统的内存管理器说:喂,俺想在地址s上放点东西。内存管理器听到后说:又来放东西啊,多大啊?程序说:不知道。内存管理器说:不知道你来干啥啊,我乍给你准备啊?简直是胡闹,一边去,其他人正等呢。这下程序犯了愁,问题不解决,没法给设计人员交代啊。想了想,又回去跟内存管理器说:这样吧,我在地址s上做一个标志吧,只有4Byte大小(32位操作系统的最大寻址能力),到时东西带来了,再将这个标志改为东西实际存放的地址,好吗?内存管理器说:这就对啦,别忘了把东西带来啊。

    通过上述两条语句,我们可以了解到,变量定义实际上表示两个含义,一个是变量名称,一个是变量的值,它们都会占用空间的,只不过有些变量由于个子比较小,所以变量名称和变量值放在一块就行,如变量i,而有些变量由于块头比较大或不确定,需要分别进行存放,如变量s。

    现在,我们站在内存管理器的角度来理解一下,假设变量a的地址为&H0013FBD0,a的值为100,那么很显然,从地址&H0013FBD0开始到&H0013FBD3这4个byte的空间里,存放的是100;而假设变量s的地址为&H0013FC50,s的值为“100”,那么,从地址&H0013FC50到&H0013FC53这4个Byte的空间里,存放的是指向实际存放“100”的值的地址。

    摘自:深入了解VB中的变量和指针

相关参考


VB中的指针技术

一个VB数组指针类

VB Environ系统环境变量函数大全

变量、常数和数据类型及过程概述

VB小技巧:字符变量中双引号的输入

深入了解VB中的变量和指针


  评论这张
 
阅读(729)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018