VB中的指针与指针变量

简介: VB中的指针与指针变量

vb指针是什么:

指针的概念源于C语言,VB没有指针的概念,但其实对象变量就可以看成是指针:

Set A=Obj 'A就是指向Obj的地址'

 VB中的指针实际就是某一变量的内存地址。例如下面的p储存了a的内存地址:

dim a as long
dim p as long
p=VarPtr(a)

  上网查资料也有的说vb指针是有的,只不过被隐藏起来了,因为vb官方不鼓励用户使用指针。下面这三个函数配合CopyMemory这个API函数可以达到和C语言的指针差不多的效果。

  • VarPtr 得到的内存地址
  • ObjPtr 是得到对象入口地址
  • StrPtr 字符串地址
Private Sub Form_Load()
Dim Test As Long
  Test = "123"
  Debug.Print VarPtr(Test) 'VarPtr(Test)可以得到变量“Test”的内存地址。'
  Debug.Print StrPtr(Test)'StrPtr(Test)可以得到变量“Test”中值的内存地址,也就是储存“123”这块内存的地址'
End Sub

  VB只能通过调用CopyMemory(将一块内存从位置拷贝到另外一个位置)函数来读写指针指向的变量地址。而C能方便高效的读写,例如在声明CopyMemory以后这样写入:

CopyMemory byval p, byval 123&,4&

来简单介绍一下CopyMemory函数用法:

CopyMemory是一个Windows API函数,它能将一块内存数据从一个位置复制到另一个位置。


函数原型:

CopyMemory(PVOID Destination,CONST VOID *Source,SIZE_T Length)


Destination:要复制内存块的目的地址。

Source:要复制内存块的源地址。

Length:指定要复制内存块的大小,单位为字节

返回值:该函数为VOID型,没有返回值。

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Private Sub Command1_Click()
Dim a As Long, b As Long, m As Long
  a = 1234      '给a赋值为1234'
  m = VarPtr(a)   '获得a的指针'
  MsgBox m      '显示指针的数值'
  CopyMemory VarPtr(b), m, 4   '复制a的内存到b的指针处'
  MsgBox b             '显示b的内容,应该就是1234'
End Sub

指针的概念:

指针的基本概念:

 为了区别内存的不同位置,内存被分成字节,内存的全部字节顺序地赋予一个称为地址的编号。

 程序中的变量将在内存中占据一定的内存字节,在这些字节中存储的数据信息称为变量的内容。

 一个变量占用连续的若干个内存字节时,最前面的一个字节的地址就作为该变量的地址。

 指针就是内存地址,是变量的地址,或函数的入口地址。

 变量的地址在程序执行时,起着非常重要的作用。当计算机在计算含有变量的表达式时,计算机按变量的地址取出其内容,并按变量的地址将计算结果存入到变量占据的内存中。例如:

int x=l;  
x=x+2;'取X的内容,完成加上2的计算,并将计算结果存入变量X占据的内存中'

其中语句“x=x+2;”中的第一个x涉及到变量x占据的内存,第二个 x是引用变量 x的内容。

vb指针变量是什么:

  用例子来看一下。

  a=3这个式子先解释一下,等式右边是常量,左边是变量。

  同理的p=&a,左边的是指针变量,右边的是指针。

int a=3;
int *p;
p=&a;

  说白了就是指针只是指向一块内存的首地址,常量是这块内存里存的东西,不能改变;变量是可以改变内存里存的东西。

指针变量的概念:

 指针变量和它所指向的变量:

 在C语言中,地址也作为一种值,能被存储、比较、赋值,并称地址数据为指针类型,而称存储地址值的变量为指针变量,简称指针。

 C程序可用运算符&取变量的地址,如表达式&x的值就是变量X的地址。程序除能按名引用变量外,也可利用变量的地址引用变量。



 直接引用:按变量名引用变量。

 间接引用:将变量A的地址存于另一变量B中,借助于变量B引用变量A称为对A的间接引用。  



 定义指针变量的一般形式为:

 - 类型 * 指针变量名;   

 - 类型 * 指针变量名=初值表达式;


 其中,指针变量名是标识符,指针变量名之前的符号“*”,表示该变量是指针类型的。而最前面的“类型”,表示该指针变量能指向变量或函数的类型。初值表达式是一个地址表达式,如表达式中有某变量的地址表达式,则这个变量应是前面已定义的。


 在C语言中,当定义局部指针变量时,如未给它指定初值,则其值是不确定的。程序在使用它们时,应首先给它们赋值。误用其值不确定的指针变量间接引用其它变量,会引起意想不到的错误。为明确表示指针变量不指向任何变量,在C语言中用0值表示这种情况,记为NULL。如:

ip= NULL;

 也称指针值为0的指针变量为空指针。对于静态的指针变量,如在定义时未给它指定初值,系统自动给它指定初值0。


 指针变量取程序对象的(开始)地址值,不能将一个整型量或任何其它非地址值赋给一个指针变量。另外,指针变量对所指向的对象也有类型限制,不能将一个不能指向的对象的地址赋给指针变量。如有以下定义:

int i=100,j,*ip,*intpt;  
float f,*fp;  
以下代码如注释所叙。  
iP=&i;/*使ip指向i*/  
intpt=ip;/*使intpt指向ip所指变量*/  
fp= &f;/*使fp指向正*/  
ip=NULL;/*使 ip不再指向任何变量*/
相关文章
|
1月前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
1月前
魔法指针 之 指针变量
魔法指针 之 指针变量
15 1
|
1月前
|
C++
析构造函数就是为了释放内存,就是在局部指针消失前释放内存,拷贝构造函数就是以构造函数为模块,在堆里面新开一块,同一个变量在堆里面的地址
本文讨论了C++中构造函数和析构函数的作用,特别是它们在管理动态内存分配和释放中的重要性,以及如何正确地实现拷贝构造函数以避免内存泄漏。
37 2
|
1月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
1月前
|
人工智能
魔法指针 之 指针变量的意义 指针运算
魔法指针 之 指针变量的意义 指针运算
19 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
33 1
|
5月前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
62 2
|
5月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)一
47 1
|
5月前
|
存储 C语言
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
C语言学习记录——7000+字长文-复习&学习指针(指针、地址、指针变量、指针与数组、指针与函数、指针数组、多级指针)二
35 1