傳值和傳引用的區別

2021-06-18 03:16:29 字數 1322 閱讀 9323

大家都用過sqlhelper,在sqlhelper類中定義一些資料庫助手函式:

通過分析某函式中呼叫「關閉連線」函式和「關閉cmd命令」函式後,是否可以關閉連線和cmd命令來分析傳值和傳引用的區別:

請注意看**中被框注的部分

分析:在executedataset(引數)函式的最後呼叫closeconn(byval conn as sqlconnection)和closecmd(byval cmd as sqlcommand),真的能 真正關閉連線和命令嗎?

實驗結果是:不能關閉。

大家注意,以上closeconn(byval conn as sqlconnection)函式和closecmd(byval cmd as sqlcommand)函式的引數傳入方式是「傳值」,也就是說傳入的conn/cmd只是原物件的乙個拷貝值(對它做任何改變都不會影響原值),而不是原物件(即,物件的記憶體位址),在executedataset()函式中conn/cmd是被關閉了(也就是說,離開本次這個函式,conn/cmd還是可用/存在狀態),但是程式繼續呼叫其他函式或該函式conn/cmd依舊是可用的

如果想要將conn/cmd物件徹底關閉,則closeconn()函式和closecmd()函式的引數傳入方式應為「傳引用」

這樣一來,問題又來了:**1中定義的conn/cmd徹底被關閉了,程式再執行如**2中excutedataset()函式類似的函式(用到conn/cmd的)時,程式會報錯,因為函式中用到的conn/cmd是不存在的。

怎麼辦?

答:**1中建立conn/cmd的部分不要,直接在**2中建立conn/cmd

傳值:如果是非物件,會傳乙個值的拷貝,對這個變數做任何改動都不影響原值。

不知道以上的例子和解釋,有沒有把傳值和傳引用的區別講清楚,很簡單的乙個東西,但是直到自己遇到問題了,去思考去解決了,才會有深的體會!!加油!!

傳值和傳引用 傳指標的區別

傳值,是把實參的值賦值給行參,那麼對行參的修改,不會影響實參的值 傳位址,是傳值的一種特殊方式,只是他傳遞的是位址,不是普通的如 int,那麼傳位址以後,實參和行參都 指向同乙個物件 傳引用,真正的以位址的方式傳遞引數,傳遞以後,行參和實參 都是同乙個物件 只是他們名字不同而已,對行參的修改將影響實...

傳值 傳指標和傳引用的區別

傳值 void myswap int a,int b 傳指標 1 void myswap int a,int b 2 void myswap int a,int b 引用傳遞 void myswap int a,int b 函式傳值 傳值實際上是在子函式的棧裡面重新開闢乙個空間儲存傳進來的實參引數值...

PHP的傳值與引用,php傳值和傳引用區別

php傳值 在函式範圍內,改變變數值得大小,都不不會影響到函式外邊的變數值。testa 1 定義變數a testb 2 定義變數b testb testa 變數a賦值給變數b echo testb 顯示為1 傳引用 類似於c語言的指標了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都...