国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
vb中Byref和Byval的剖析(原)
先說說自己在實踐中遇到什么問題了。

dim bytSend(2) as byte
bytSend(0) = &H35
bytSend(1) = &H30
bytSend(2) = &H30
SendMessage htxt, WM_SETTEXT, 0, bytSend(0)

dim strSend as string  
strsend="500"
SendMessage htxt, WM_SETTEXT, 0, byval strsend

以上這兩段代碼執(zhí)行的效果是一樣的,不是很理解,誰能幫我解釋一下?一般byval是用在形參前,這里用在實參前,有什么特殊意義嗎?

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)這是SendMessage的原型
Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)這是VB中的聲明

這里調用的含義,當是定義的字符數組時,按地址傳遞,第一個元素傳遞過去是首地址,類似指針的運行;當是字符串傳遞,必須按值傳遞,傳遞過去還是分成了字符數組進行處理,就像c語言中字符串與字符數組的關系……不知道這樣理解對不對

以前我很多地方用到過第一種方式,不知道是不是都可以換成第二種方式,如果不行,是為什么?


問題有點長哈,雖然一直在使用這兩個表示符,但是從來沒有深究過,今天遇到這種問題,在csdn上經幾位大師的指點終于想明白了一些,這里記錄下來,方便自己(csdn地址:http://topic.csdn.net/u/20120412/18/882fde38-74ab-40a7-9be2-ef1a0c12eeff.html

這里我分為三層進行理解:
第一層:表層的一個認識,msdn上說的Byval按值傳遞,Byref按地址傳遞,我們就可以這樣理解,按值傳遞就是僅僅傳遞的是值過去,所以沒有任何的影響原來的數據;按地址傳遞,就想當與調用的函數改變的也是這個值。例如:

sub Wrap(byref a as interger,byval b as interger)'兩個數交換

a=a+b

b=a-b

a=a-b

end sub


a=5:b=7

print a & "," & b'輸出 5,7

call wrap(a,b)

print a & "," & b'輸出 7,7(a變了,b沒有變)

第二層:計算機函數的執(zhí)行就真的是上面那個簡單嗎?肯定不是,那么我們繼續(xù)看看它到底是怎樣運行的,我們知道所有處理的數據在計算機運行是放在內存中的,當創(chuàng)建變量后就給變量分配了一個類型空間,例如上例中的實參a,b。a這個變量是有一個指針指向的,我們假設為pa,傳遞給形參時,傳遞的是這一個指針,于是形參a有值了,就是pa指向的內存里的值,即實參a和形參a共用一個指針,共用一個內存單元;實參b有一個指針我們假設為pb1,它在傳遞時計算機認出是按值傳遞,就建立一個跟實參變量b同樣大小的內存空間,將b的內容拷入,這個空間也有一個指針,我們假設為pb2,調用過程時,形參被賦予內容,它的內容就是pb2所指向的內存中的內容。這就是傳遞參數的實際情況,當處理時,pa和pb2指向的內存中的數據都發(fā)生了變化,但是pb1內的數據沒有發(fā)生變化,所以這里我們就明白了為什么a發(fā)生了變化,但是b沒有變換的原因。

第三層:參數傳遞過程中還有各種各樣的數據類型限制是為了什么?同第二層的說明,比如我在主程序中是int型,用到的是16位,在調用的形參中是使用的32位變量,這樣他們處理的時候在內存中讀取的數據就不一樣了,16位存儲兩個字節(jié)空間,32位獲取4個字節(jié)空間,這樣處理出來的數據就非我們本意了,所以必須要有數據限制。

這三層得到了理解,上面我提出的問題應該也能完全的認識了,在應用的時候我們可以進行靈活的設置!?。?!



本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VB之API初學者教程第三章
vb 簡單彩色進度條代碼 |VB 網|VB 視頻教程|VB編程入門網
VB真是想不到系列之二:VB《葵花寶典》--指針技術
在Visual Basic中如何拖動窗體或控件_VB窗體文章_VB_編程開發(fā)_芯友網
VB api 中級
VB問題全功略(14)listbox 和combox
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服