- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VB指针技术
VB指针技术
想当年东方不败,黑木崖密室一战,仅凭一根绣花针独战四大高手,神出鬼没,堪称天下武林第一高手。若想成为VB里的东方不败,熟习VB《葵花宝典》,掌握VB指针技术,乃是不二的法门。
欲练神功,引刀……,其实掌握VB指针技术,并不需要那么痛苦。因为说穿了,也就那么几招,再勤加练习,终可至神出鬼没之境。废话少说,让我们先从指针的定义说起。
一、指针是什么?
不需要去找什么标准的定义,它就是一个32位整数,在C语言和在VB里都可以用Long类型来表示。在32位Windows平台下它和普通的32位长整型数没有什么不同,只不过它的值是一个内存地址,正是因为这个整数象针一样指向一个内存地址,所以就有了指针的概念。
有统计表明,很大一部分程序缺陷和内存的错误访问有关。正是因为指针直接和内存打交道,所以指针一直以来被看成一个危险的东西。以至于不少语言,如著名的JAVA,都不提供对指针操作的支持,所有的内存访问方面的处理都由编译器来完成。而象C和C++,指针的使用则是基本功,指针给了程序员极大的自由去随心所欲地处理内存访问,很多非常巧妙的东西都要依靠指针技术来完成。
关于一门高级的程序设计语言是不是应该取消指针操作,关于没有指针操作算不算一门语言的优点,我在这里不讨论,因为互联网上关于这方面的没有结果的讨论,已经造成了占用几个GB的资源。无论最终你是不是要下定决心修习指针技术《葵花宝典》,了解这门功夫总是有益处的。
注意:在VB里,官方是不鼓励使用什么指针的,本文所讲的任何东西你都别指望取得官方的技术支持,一切都要靠我们自己的努力,一切都更刺激!
让我们开始神奇的VB指针探险吧!
二、来看看指针能做什么?有什么用?
先来看两个程序,程序的功能都是交换两个字串:
【程序一】:标准的做法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写的,它时刻都在提醒我们它需要指针;
三是突破限制,VB想照料我们的一切,VB给了我们很强的类型检查,VB象我们老妈一样,对我们关心到有时我们会受不了,想偶尔不听妈妈的话吗?你需要指针!
但由
您可能关注的文档
最近下载
- 第29课中国特色社会主义进入新时代课件(共18张PPT)(含音频+视频).pptx VIP
- 第29课中国特色社会主义进入新时代中外历史纲要上册课件(共20张PPT)(含音频+视频).pptx VIP
- 第29课 中国特色社会主义进入新时代 教学设计.pdf VIP
- 冷卷圆柱螺旋弹簧技术条件 第2部分:压缩弹簧.pdf VIP
- 2025年国开《Windows网络操作系统管理》形考任务4 配置故障转移群集服务实训.pdf VIP
- 2023-2024学年江苏省南京市鼓楼区七年级上学期期末考数学试卷含答案.docx VIP
- 电路理论 龙建忠 方勇 著课后习题答案 科学出版社资料资料资料.pdf VIP
- 江苏省南京市六合区2022-2023学年七年级上学期期末考试数学试卷(含答案).doc VIP
- 包皮过长包茎护理ppt.pptx
- 2024-2025学年江苏省南京市七年级上学期期末考试数学试卷.docx VIP
原创力文档


文档评论(0)