VB中的指针.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VB中的指针

VB中的指针 VB中的指针技术 发表:rsbar 阅读:222次 关键字:VB 指针技术 字体:[大 中 小] VB中的指针技术 前段时间因为需要提高VB字符串处理效率,在MSDN找到一篇Bring Your Hatchet的文章,在将这篇文章翻译了快一半的时候,碰巧在网上搜索找到了更为详细的中文资料,捡个现成,发布出来大家共享。 巧妇难为无米之炊,VB本身不提供指针,而在某些特殊场合需要使用指针时VB则心有余而力不足,比如突破VB类型限制,高速批量数组操作等!这在以前一直是个另VB程序员头疼的问题。自从VB中隐藏的指针操作函数被公开来,在VB中灵活使用指针成为了可能!其实很简单,武器在此:CopyMemory,VarPtr,StrPtr和ObjPtr。 一、指针是什么? 不需要去找什么标准的定义,它就是一个32位整数,在C语言和在VB里都可以用Long类型来表示。在32位Windows平台下它和普通的32位长整型数没有什么不同,只不过它的值是一个内存地址,正是因为这个整数象针一样指向一个内存地址,所以就有了指针的概念。 有统计表明,很大一部分程序缺陷和内存的错误访问有关。正是因为指针直接和内存打交道,所以指针一直以来被看成一个危险的东西。以至于不少语言,如著名的JAVA以及现在流行的C#,都不提供对指针操作的支持,所有的内存访问方面的处理都由编译器来完成。而象C和C++,指针的使用则是基本功能,指针给了程序员极大的自由去随心所欲地处理内存访问,很多非常巧妙的东西都要依靠指针技术来完成。 注意:在VB里,官方是不鼓励使用什么指针的,所以关于指针操作的任何东西你都别指望取得官方的技术支持,一切都要靠我们自己的努力,一切都更刺激! 在这里我们必须感谢Bruce McKinney (《Hardcore Visual Basic 》的作者),是他为我们带来了VB的指针革命。正是这位大师给32位的VB带来了CopyMemory这个可以移动内存的API,也正是有了这个API,我们才能利用指针完成我们原来想都不敢想的一些工作。感兴趣的话,你可以看看MSDN的Knowledge Base中ID: Q129947的主题。 二、来看看指针能做什么?有什么用? 先来看两个程序,程序的功能都是交换两个字串: 【程序一】: 标准的做法SwapStr Sub SwapStr(sA As String, sB As String)  Dim sTmp As String  sTmp = sA: sA = sB: sB = sTmp End Sub 【程序二】: 用指针的做法SwapPtr Private Declare Sub CopyMemory Lib kernel32 Alias RtlMoveMemory _ (Destination As Any, Source As Any, ByVal Length As Long) Sub SwapPtr(sA As String, sB As String)  Dim lTmp As Long  CopyMemory lTmp, ByVal VarPtr(sA), 4  CopyMemory ByVal VarPtr(sA), ByVal VarPtr(sB), 4  CopyMemory ByVal VarPtr(sB), lTmp, 4 End Sub 你是不是以为第一个程序要快,因为它看着简单而且不用调用API(调用API需要额外的处理,VB文档明确指出大量调用API将降低程序性能)。但事实上,在VB集成环境中运行,程序二要比程序一快四分之一;而编译成本机代码或p-code,程序二基本上要比程序一快一倍。下面是两个函数在编译成本机代码后,运行不同次数所花时间的比较:   运行100000次,SwapStr需要170毫秒,SwapPtr需要90毫秒。   运行200000次,SwapStr需要340毫秒,SwapPtr需要170毫秒。   运行2000000次,SwapStr需要3300毫秒,SwapPtr需要1500毫秒。 的确,调用API是需要额外指令来处理,但是由于使用了指针技术,它没有进行临时字串的分配和拷贝,因此速度提高了不少。 怎么样,想不到吧!C/C++程序员那么依赖指针,无非也是因为使用指针往往能更直接的去处理问题的根源,更有驾驭一切的快感。他们不是不知道使用指针的危险,他们不是不愿意开卫星定位无级变速的汽车,只是骑摩托更有快感,而有些地方只有摩托才走得过去。 和在C里类似,在VB里我们使用指针也不过三个理由: 一是效率,这是一种态度一种追求,在VB里也一样,记住:速度是使用指针技术的根本要求。 二是不能不用,因为操作系统是C写的,它时刻都在提醒我们它需要指针; 三是突破

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档