在VBjava中定义数组了一个返回数组的函数,但是函数有可能什么也不返回,怎样才能检测出它没有返回数组

用户名:useway
文章数:126
评论数:1227
访问量:604165
注册日期:
阅读量:1297
阅读量:3317
阅读量:583124
阅读量:468202
51CTO推荐博文
VB无所不能之一:指针
――作者:钟声
博客地址:
&&& 无数次的见到有人一谈到VB都会显露出不屑的神情。
&&& VB一个软件开发领域的老朋友,它曾经以开发便捷与简单著称,它在一定时间内成为一个非常常用的开发语言。
&&& 然而,当很多人享受这VB带来的便捷的同时,还在嘲讽这个VB,总是用VC的种种所谓的优势来和VB对比。让我想起了今天的Java,当那些享受着Java带来的轻松的人,却还在用C/C++嘲讽着Java是一样的。
&&& VB它的优势岂能由VC企及,不说别的,只说VB的开发速度VC基本上是望尘莫及的。传统上,VC相对与VB而言有很多的优势:
&&& 1、指针:这个似乎是打击所有没有指针的语言(如:java)的利器。
&&& 2、原始IP包的获取:用混杂模式获取IP数据报信息,C++中称为原始IP包。
&&& 3、系统消息钩子:用钩子程序获取Windows系统消息。
&&& 4、利用静态链接实现软件的绿化:同时也便于生成一个病毒或者木马程序。
&&& 5、和硬件相关的开发,如显示器、声卡、网卡等。
本系列连载,将针对上述5个问题来讨论,VB实现的可能性。
一、为什么VB要用指针:
&&& C/C++中都可以操作指针,用指针可以很方便的访问到内存区域,C++中的指针其实就是数组的一个访问方式而已,由于其使用比较方便,可以非常方便的进行对内存区域的赋值与读取操作,因此,用惯了C++的程序员乐此不疲。
&&& 其实,我们在用VB开发一般程序的时候是没有必要用指针去访问内存某区域的。因为VB为我们提供了一个非常方便的访问方法――就是VB的数组。用数组可以很方便的使用一组数据。然而,为什么,在VB中我们非要去实现指针的操作呢?
&&&& 1、数据操作速度的需求
&&&& 比如,需要针对两个数组之间的复制操作,需要给数组做一个循环,然后在逐个的添加到新的数组中,用指针的方法速度会快很多。
&&&& 2、在对系统库函数的调用时
&&&& Windows中的User32.dll\GDI32.dll\Kernel32.dll等这些系统库函数中,很多都是接收指针参数的,因此,如果VB需要调用这些函数的时候,就必须要进行指针的传参。
二、VB怎么用指针
&&& 要想弄明白VB怎么使用指针,就必须要弄明白两件事,第一,如何取得数组的指针,第二,如何将指针所指向的数组取出来。
&&&&A、在讲解这两个问题之前,我们需要了解几个问题:
&&&&1、VB的数组与C++的数组的区别
&&& 有可能,大家现在认为VB的数组和C++的数组没有任何区别,都是内存中的一段地址而已,其实不然。
&&& C++中是真的数组,真的是一段地址,而且,当你的指针访问超出了数组的范围,也没人理你,只是很容易导致系统崩溃而已。
&&& 而VB数组其实是一个结构体,在这个结构体中包含了关于这个数组的描述信息,其结构类似如下:
Private Type&VB数组
&&&数组维数
&&&数组大小&& 真实的数组End Type
&&&&&2、Copymemory系统函数
&&&& 这个函数有点像Java中的ArrayCopy函数,就是将两段内存空间进行复制操作。它的声明是这样的:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  函数原型
  VOID CopyMemory(  PVOID Destination,   CONST VOID *Source,   DWORD Length   );
&&&&&&& 第一个参数:目的地址指针
&&&&&&& 第二个参数:源地址指针
&&&&&&&&第三个参数:复制的大小
&&&&&&&&请注意,在CopyMemory的VB声明中,传递的源与目的是Any类型,也就是说可以是任何类型的变量。
&&& B、如何用指针
&&& 1、如何取得数组的指针
&&& 请看如下程序:
&&&&pOutputArray As Long&&&&outputArray() As Byte
&&& ReDim outputArray(100) As Byte&&& pOutputArray = VarPtr(outputArray(0))
&&& 说明:
&&& 我们声明了一个Byte数组outputArray,用VarPtr函数,取出数组的指针赋给了Long型变量pOutputArray。
&&& 2、如何将指针所指向的数组取出来
&&& 请看如下程序:
&&& CopyMemory ByVal pOutputArray, ByVal pData, UBound(outputArray)
&&& 说明:
&&& pData是一个内存块的指针,通过这句话的执行,我们得到了pData指向的内存区域中的数据到pOutputArray数组中。
三、高级应用:取得函数的指针
&&& 有时候,系统函数库调用中会要求有回调函数,而将回调函数以参数进行传递时,并不能传入回调函数名,而是需要将回调函数的地址传参,这时候,我们就需要得到回调函数的地址。
&&& 在这里我只给出例子代码,有兴趣的朋友可以去研究。
Public Sub RegisterWinProc(ByVal hwnd As Long)
&&& '传入hWnd是本窗口的句柄&&& 'GetWindowLong从指定窗口的结构中取得信息&&& prevWndProc = GetWindowLong(hwnd, GWL_WNDPROC)&&& 'SetWindowLong在窗口结构中为指定的窗口设置信息&&& SetWindowLong hwnd, GWL_WNDPROC, AddressOf WndProc&&& DesthWnd = hwndEnd Sub
四、结束语
&&& 大家看,VB在处理指针的时候,只要掌握了相应的方法,是不是VC在这时候也就黯然失色了呢?
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》
18:21:06 19:36:10 22:31:28 22:31:41 23:44:17 18:33:18 18:58:23 16:37:01 00:18:14 07:12:14 07:14:35 15:32:11 23:26:36 14:34:29 19:20:31 &&1&
&&页数 ( 1/2 ) &c语言中在一个函数中定义了一个数组,在另外一个函数中如何使用这个数组
全部答案(共1个回答)
<div class="...
数组不可以直接返回,只能通过参数传递出来,比如:
void fun(int* p);
int main()
int a[100];
#define N 5
int eliminate3(int a[],int b[])
int i,k=0;
for(i=0;i&N;i+...
没有别的办法,唯一的方法是循环,一个一个输出
你可以写一个通用的输出整型数组的方法,参数是整形指针和需要显示的整数的数量,这样处理起来就方便了
定义数组时int a[LEN];长度len只能是常数或者相当于常数的宏
你可以先定义一个指针int *p;在cin&&n后,p = new int[n];就可以...
答: bpd+hc+ac fl男女可以看出来吗?是通过哪些数值看出来的啊?
答: 如果你理解能力强考数据库,其中比如关系数据库之类的需要去领悟
如果你记忆能力强考网络,各种各样的名词,背下来就得分。
还有官方指定的教材要有,上机最好做一做南开...
答: 新年好!首先,你必须了解计算机的组成和结构以及操作系统的运作原理,这是基础
如果你想学习开发多线程、WINDOWS应用、动态链接库、WINDOWS组件的话,建议...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区

我要回帖

更多关于 c语言中数组的定义 的文章

 

随机推荐