-
形參和實參的區(qū)別
形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用,?離開該函數(shù)則不能使用。
實參出現(xiàn)在主調(diào)函數(shù)中,進入被調(diào)函數(shù)后,實參變量也不能使用。?
形參和實參的功能是作數(shù)據(jù)傳送。發(fā)生函數(shù)調(diào)用時,?主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
1.形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,?即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。?函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。?
2.實參可以是常量、變量、表達式、函數(shù)等,?無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須具有確定的值,?以便把這些值傳送給形參。?因此應(yīng)預先用賦值,輸入等辦法使實參獲得確定值。?
3.實參和形參在數(shù)量上,類型上,順序上應(yīng)嚴格一致,?否則會發(fā)生“類型不匹配”的錯誤。?
4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。?即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。?因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。
5.當形參和實參不是指針類型時,在該函數(shù)運行時,形參和實參是不同的變量,他們在內(nèi)存中位于不同的位置,形參將實參的內(nèi)容復制一份,在該函數(shù)運行結(jié)束的時候形參被釋放,而實參內(nèi)容不會改變。
而如果函數(shù)的參數(shù)是指針類型變量,在調(diào)用該函數(shù)的過程中,傳給函數(shù)的是實參的地址,在函數(shù)體內(nèi)部使用的也是實參的地址,即使用的就是實參本身。所以在函數(shù)體內(nèi)部可以改變實參的值。
查看全部 -
注意,當一個函數(shù)中存在多個
defer
語句時,它們攜帶的表達式語句的執(zhí)行順序一定是它們的出現(xiàn)順序的倒序。查看全部 -
哎 這個老師喜歡用很復雜的話來說一件很簡單的事情?繞來繞去的很好玩嗎 ?這樣很費腦筋啊 看一句話看半天
例如?“對照這張表格,我們就能夠解釋上面那條
for
語句打印出的內(nèi)容了,即:每次迭代出的第一個值所代表的是第二個字符值經(jīng)編碼后的第一個字節(jié)在該字符串經(jīng)編碼后的字節(jié)數(shù)組中的索引值。請大家真正理解這句話的含義?!?/strong>說的就是字符經(jīng)過UTF-8編碼之后的索引?
該字符所占第一個字節(jié)的位置就是該字符的索引值啊?~~為什么要說那么繞 要不是學過C我真看不懂。
查看全部 -
工作區(qū)和GOPATH目錄
查看全部 -
?攜帶
range
子句的for
語句還可以應(yīng)用于一個通道值之上。其作用是不斷地從該通道值中接收數(shù)據(jù),不過每次只會接收一個值。注意,如果通道值中沒有數(shù)據(jù),那么for
語句的執(zhí)行會處于阻塞狀態(tài)。無論怎樣,這樣的循環(huán)會一直進行下去。直至該通道值被關(guān)閉,for
語句的執(zhí)行才會結(jié)束。和channel相關(guān)
查看全部 -
變量查看全部
-
recover調(diào)用一定要在發(fā)生異常(panic調(diào)用)之前
控制權(quán)交到調(diào)用包含recover語句的函數(shù)的函數(shù),包含recover的函數(shù)后面的代碼都不會執(zhí)行了
查看全部 -
default語句的執(zhí)行順序和它放的位置無關(guān)
fallthrough語句只能貫穿一條case語句,而不是所有
fallthrough語句放在最后一個case語句中會編譯出錯
查看全部 -
Go語言定義指針的方式與C/C++不同,*需要放在類型之前,如:
var p *int ? ? ? ?// Golang,自動初始化為nil
int* p = null; ? ?// C/C++查看全部 -
切片操作方括號中的第三個參數(shù)也是索引值,也就是說容量最多可以到達底層數(shù)組(切片)的哪個位置,舉個例子:
number := [...]{1, 2, 3, 4, 5, 6, 7, 8, 9}
slice := number[ 1 : 3 :?5?]
上面切片方括號中的1,3,5表示的都是索引,即是說:slice切片的元素從number數(shù)組中索引為1的元素開始,到索引為(3-1=2)的元素結(jié)束,容量到索引為(5-1=4)的元素結(jié)束。
所以:
slice的長度 = 3 - 1 = 2
slice的容量 = 5 - 1 = 4
查看全部 -
數(shù)組也可以被切片,返回的是切片
新切片的容量 = 原切片(數(shù)組)的容量 - 切片起始下標
例:
var array = [5]int ?//cap(array) = 5
var slice = array[2?: 4]
那么:
cap(slice) = cap(array) - 2 = 5 -2 = 3
查看全部 -
//聲明數(shù)組的三種方式:
var array1 = [5]int
var array2 = [5]int {1, 2, 3}
var array3 = [...]int {1, 2, 3, 4, 5}
//注:方括號中必須寫明數(shù)組長度或者...,否則定義的將是切片而不是數(shù)組
查看全部 -
//變量賦值的方式
num1 := 1
num2, num3 := 2, 3
var num4 = 4
var num5 int = 5
var num6, num7 = 6, 7
var num8, num9 int = 8, 9
var (
????num10 = 10
????num11 = 11
)
var (
????num12 int = 12
????num13 int = 13
)
//注:const和var的用法完全一樣
查看全部 -
其實標識符可以是下劃線開頭的,但數(shù)字是真的不可以。
查看全部 -
<img src="https://img1.sycdn.imooc.com//5abf67490001a13a05000398.jpg" title="" alt="https://img1.sycdn.imooc.com//5abf67490001a13a11620924.jpg" />查看全部
舉報