1樓:
private x as integer,private表示變數x只能在本form裡使用,其他窗體不能呼叫;private x as integer寫到其他過程之外,說明其作用域是整個窗體;作用域,就是乙個變數的生命週期,從定義到消失的**區間,例如:
private sub command1_click()
dim x as integer 'x 出生了。另外注意:過程裡不能用private,要用dim
x = 5
y = 3
call f1(x, y)
print x; y
end sub 'x死亡了,x只在這個區間「活著」,程式可以訪問
為什麼會有這種輸出? 先考慮有private x as integer的情況
首先要明白兩個問題:(1)引數傳遞原理,簡單點講吧,程式執行到call f1(x, y),轉向執行private sub f1(byval a as integer, byval b as integer),這裡面的x是private...那個x,這個x的作用域是整個窗體;而這裡的y是新產生的變數,作用域只在該過程裡,出了過程就消失了,那麼,沒看到這裡dim y...
啊,是的,這就是第(2)個問題,vb裡可以不定義使用乙個變數,dim可以省略,但是,如果你在窗體**的開始加上option explicit,dim就不能省略了,該語句強制要求變數使用前要定義。不寫option explicit,預設可以省略dim。接著看流程,程式執行完了private sub f1(byval ...
後,返回到private sub command1_click(),執行下一條print x; y,這裡的x就是private sub f1裡的x,是25,但此處的y是private sub command1_click()裡的y,是3
如果不寫private x as integer,
private sub f1(byval a as integer, byval b as integer)
x = a * a
y = b + b
end sub
裡面的x,y是在這裡新產生的,到end sub就消失了,在private sub command1_click()裡輸出的x,y就是在這裡面的x,y,5和3
2樓:匿名使用者
private x as integer
寫在前面是表示x是乙個全域性變數,這樣的話在private sub command1_click()和private sub f1(byval a as integer, byval b as integer)裡面處理的x都是乙個變數。
所以在private sub f1(byval a as integer, byval b as integer)處理中會實際上把x這個值修改了。如果不寫的話,private sub command1_click()和private sub f1(byval a as integer, byval b as integer)裡面的x分別是各自函式的區域性變數,所以在private sub f1(byval a as integer, byval b as integer)中對x的處理不會影響private sub command1_click()裡面的x的值。
3樓:匿名使用者
private x as integer
private 宣告模組繃私有變數,在那個位置用dim x as integer是一樣的。
如果你不加它,
private sub command1_click()end sub
中的x是command1_click中的區域性變數與過程f1的計算結果無關,
你列印是此局變數x的值所以是5,而過程f1中的私有變數x是25,也就是說你不加它,兩個過程中的兩個x是兩個區域性變數,互無關係。
如果你加了它,兩過程中的x就是乙個變數了,所以回返回25。
4樓:匿名使用者
x在函式外面,是全域性變數,不管你在**改了,它的值都變了。
y是作為引數傳入函式,而且這裡是值傳遞的,函式裡面隨便怎麼整,對外面的值一點影響都沒有的。
再解釋一下,f1裡面的y和command1_click裡面的y根本就不是同乙個東西,
這裡沒報錯是因為沒有強制要求變數宣告,否則f1裡會報錯,說y沒有定義。
5樓:精製骨架
x 和 y 都是區域性變數
command1 和sub f1中的x 並不是同乙個變數這是vb引數傳遞的基本知識
不加byval 預設的是byref
byref 是傳址,就是把變數的位址傳送給函式,在函式的內部對引數的修改,實際上是對變數位址裡的資料修改,所以當函式返回的時候,傳進來的變數也是跟著改變的
byval 是傳值,顧名思義,就是把變數的資料傳給函式,函式內部對其做任何處理都不會影響變數本身的值
舉個簡單的例子
如果你寫乙個函式,想讓它返回兩個或更多值,你就用傳址的方式,在函式內部對引數的修改,返回之後,你傳進去的變數,不就有新的值了嗎(還有其他用法,我在這就不說了)
vb題一道,求解疑,VB題一道,求解疑
假設陣列中的不是1 10,而是1 2n n可能為任意大於0的整數 你的寫法就沒有上面寫得通用,按簡化程度說,他的 比你少1行,但做了同樣一件事 n n 1 與你的n 11 i 是一樣的作用,正可謂異曲同工!一開始,它的n 10,i 1 而每一次迴圈,n n 1,那麼 n 就是 10,9,8,7,6 ...
請教一道vb題,請教一道vb的程式設計題!!
太睏了,直接用if語句給你 if ch1.check true thentext1.text 學習程式設計 end if if ch2.check true then end if if ch1.check true and ch2.check true then end if if ch1.che...
一道英語題,求解,求解一道英語題
你好。1 在答題以前,我足足看了10分鐘時間。語感告訴我,這道題出得非常不好,因為根據不同的思維角度,這四個選項都是正確的。難怪你糾結。residents inhabitants from 是完全可以接受的。同樣,immigrants emigrants from 也是正確的表達。如果是單項選擇,我...
一道初二數學題,求解一道數學題。
解答 1 設ae 1,則ad n,de n 1,連線ef,設ef x,則bf x,af n x,在直角 aef中,由勾股定理得 1 n x x 解得 x n 1 2n 又易證 feh fbh,feh b 90 易證 aef dqe,1 dq x qe n x n 1 整理得 dq 2n n 1 eq...
解釋一道VB題
這個哪有為什麼啊。首先迴圈。新增列表中3 4 5 6 7 8然後刪除。所以1的時候刪除4 剩下3 0 5 1 6 2 2的時候刪除6.然後就是3.也就是8.最後剩下的不就是3 5 7 了?對程式行編號如下 1 private sub form click 2 dim i 3 for i 3 to 8...