版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、目錄:1.2.函數(shù)函數(shù)變作用域函數(shù)變(函數(shù)作為值)5.函數(shù)閉包可變參數(shù)遞歸函數(shù)指針函數(shù)參數(shù)傳遞(值傳遞與引用傳遞)一、函數(shù)(一)、函數(shù)!、函數(shù)是組織好的、可重復(fù)使用的執(zhí)特定任務(wù)的代碼塊。它可以提高應(yīng)用程序的模塊性和代碼的重復(fù)用率。、#$語言支持普通函數(shù)、函數(shù)和閉包,從設(shè)計上對函數(shù)進優(yōu)化和改進,讓函數(shù)使用起來加方。%、#$語言的函數(shù)屬于一等公民(&()*+,-.))/函數(shù)本身可以作為值進傳遞;支持函數(shù)和閉包(,-$)0(1);函數(shù)可以滿足接口。(二)、!、函數(shù)函數(shù)的作用普通函數(shù)需要先才能調(diào)用,一個函數(shù)的包括參數(shù)和函數(shù)名等。編函數(shù)與指針譯通過回參數(shù)。才能解函數(shù)應(yīng)該怎樣在調(diào)用代碼和函數(shù)體之間傳遞參數(shù)
2、和返2、語法格式:func 函數(shù)名(參數(shù)表)(返回參數(shù)表)/函數(shù)體funcame (parametername type1, parametername type2.)(output1 type1, output2 type2.) /邏輯代碼/返回多個值return value1, value2.3、函數(shù)定析:func:函數(shù)關(guān)鍵字。函數(shù)由 func 開始ame:函數(shù)名。函數(shù)名和參數(shù)表一起函數(shù)簽名。函數(shù)名由字母、數(shù)字和下劃線組成。函數(shù)名的第一個字母能為數(shù)字。在同一個包內(nèi),函數(shù)名稱能重名。parametername type:參數(shù)表。參數(shù)就像一個占位符,定義函數(shù)時的參數(shù)叫做形式參數(shù),形參變是函數(shù)的
3、局部變;當(dāng)函數(shù)被調(diào)用時,你可以將值傳遞給參數(shù),這個值被稱為實際參數(shù)。參數(shù)表指定的是參數(shù)類型、順序、及參數(shù)個數(shù)。參數(shù)是可選的,也就是說函數(shù)也可以包含參數(shù)。參數(shù)類型的簡寫在參數(shù)表中,如果有多個參數(shù)變,則以逗號分隔;如果相鄰變是同類型,則可以將類型省。如:func add (a , b) Go語言的函數(shù)支持可變參數(shù)。接受變參的函數(shù)是有著定數(shù)的參數(shù)的。func myfunc(arg .) arg .告訴Go這個函數(shù)接受定數(shù)的參數(shù)。注意,這些參數(shù)的類型全部是slice。在函數(shù)體中,變arg是一個的output1 type1, output2 type2:返回值表。 返回值返回函數(shù)的結(jié)果,結(jié)束函數(shù)的執(zhí)。
4、Go語言的函數(shù)可以返回多個值。返回值可以是:返回數(shù)據(jù)的數(shù)據(jù)類型,或者是:變名+變類型的組合。函數(shù)時有返回值,必須在函數(shù)體中使用return語提供返回值表。如果只有一個返回值且回值的括號。return后的數(shù)據(jù),要保持和致。返回值變,那么可以省包括返的返回值類型、數(shù)、順序一如果函數(shù)沒有返回值,函數(shù)中也可以使用return關(guān)鍵字,用于強制結(jié)束函數(shù)。函數(shù)體:函數(shù)定義的代碼集合,是能夠被重復(fù)調(diào)用的代碼片段。(三)、變作用域1、概述作用域是變、常、類型、函數(shù)的作用范圍。Go 語言中變可以在三個地方:函數(shù)內(nèi)定義的變稱為局部變函數(shù)外定義的變稱為全局變函數(shù)中定義的參數(shù)稱為形式參數(shù)2、局部變在函數(shù)體內(nèi)的變稱之為局
5、部變,它們的作用域只在函數(shù)體內(nèi),參數(shù)和返回值變也是局部變。3、全局變在函數(shù)體外的變稱之為全局變,全局變可以在整個包甚至外部包(被導(dǎo)出后)使用。全局變可以在任何函數(shù)中使用。Go 語言程序中全局變與局部變名稱可以相同,但是函數(shù)內(nèi)的局部變會被優(yōu)先考慮。4、形式參數(shù)形式參數(shù)會作為函數(shù)的局部變來使用。5、案分析package mainimport fmt全局變 */= 7= 9/*var a1var b1func main() /* main 函數(shù)中局部變 */a1, b1, c1 := 10, 20, 0fmt.Pr fmt.Prfmt.Prf(main()函數(shù)中 a1 = %dn, a1) /10f
6、(main()函數(shù)中 b1 = %dn, b1) /20f(main()函數(shù)中 c1 = %dn, c1) /0c1 = sum(a1, b1)fmt.Prf(main()函數(shù)中 c1 = %dn, c1) /33/* 函數(shù)定義-兩數(shù)相加 */func sum(a1, b1 a1+b1 += 2c1 = a1 + b1) (c1) fmt.Prfmt.Pr fmt.Prf(sum() 函數(shù)中 a1 = %dn, a1) /11f(sum() 函數(shù)中 b1 = %dn, b1) /22f(sum() 函數(shù)中 c1 = %dn, c1) /33return c1輸出結(jié)果:main()函數(shù)中 a1
7、= 10main()函數(shù)中 b1 = 20 main()函數(shù)中 c1 = 0 sum() 函數(shù)中 a1 = 11 sum() 函數(shù)中 b1 = 22 sum() 函數(shù)中 c1 = 33main()函數(shù)中 c1 = 33(四)、函數(shù)變(函數(shù)作為值)在Go語言中,函數(shù)也是一種類型,可以和其它類型一樣被保存在變中??梢酝ㄟ^type來定義一個自定義類型。函數(shù)的參數(shù)完全相同(包括:參數(shù)類型、個數(shù)、順序),函數(shù)返回值相同。1、案代碼一: package main import (fmt strings)func main() result := StringToLower(AbcdefGHijklMNOP
8、qrstUVWxyz, prosCase)fmt.Prln(result)result = StringToLower2(AbcdefGHijklMNOPqrstUVWxyz, prosCase)fmt.Prln(result)/處字符,奇數(shù)偶數(shù)依次顯示為大小寫func prosCase(str string) string result := for i, value := range str if i%2 = 0 result += strings.ToUpper(string(value) else result += strings.ToLower(string(value)retur
9、n resultfunc StringToLower(str string, f func(string) string) string fmt.Prf(%T n, f)return f(str)type caseFunc func(string) string /caseFunc會形成一種新的類型。一個函數(shù)類型。通過type關(guān)鍵字,func StringToLower2(str string, f caseFunc) string fmt.Prf(%T n, f)return f(str)2、案代碼二:package mainimport fmttype prosFunc func() bo
10、ol /一個函數(shù)類型func main() slice := 1, 2, 3, 4, 5, 7fmt.Prln(slice = , slice)odd := filter(slice, isOdd) / 函數(shù)當(dāng)做值來傳遞fmt.Prln(奇數(shù)元素: , odd)even := filter(slice, isEven) / 函數(shù)當(dāng)做值來傳遞fmt.Prln(偶數(shù)元素: , even)/判斷元素是否是偶數(shù)func isEven(eger) bool ifeger%2 = 0 return truereturn false/判斷元素是否是奇數(shù)func isOdd(eger) bool ifeger
11、%2 = 0 return falsereturn true/根據(jù)函數(shù)來處切片,根據(jù)元素奇數(shù)偶數(shù)分組,返回新的切片func filter(slice var result , f prosFunc) for , value := range slice if f(value) result = append(result, value)return result3、函數(shù)變的使用步驟及意義:定義一個函數(shù)類型實現(xiàn)定義的函數(shù)類型作為參數(shù)調(diào)用函數(shù)變的用法類似接口的用法。函數(shù)當(dāng)做值和類型在寫一些通用接口的時候非常有用,通過上面子可以看到prosFunc這個類型是一個函數(shù)類型,然后兩個filter函數(shù)的參
12、數(shù)和返回值與prosFunc類型是一樣的。用戶可以實現(xiàn)很多種的邏輯,這樣使得程序變得非常的靈活。(五)、1、概念函數(shù)Go語言支持函數(shù),即在需要使用函數(shù)時,再定義函數(shù),函數(shù)沒有函數(shù)名,只有函數(shù)體,函數(shù)可以被作為一種類型被賦值給變,也往往以變方式被傳遞。函數(shù)經(jīng)常被用于實現(xiàn)回調(diào)函數(shù)、閉包等。2、定義格式func(參數(shù)表) (返回參數(shù)表) /函數(shù)體函數(shù)3、定義函數(shù)(1)、在定義時調(diào)用 package main import fmt func main() func(data函數(shù)) fmt.Pr(100)ln(o , data)(2)、將函數(shù)賦值給變package main import fmt fun
13、c main() f:= func(data string) fmt.Prln(data)f(歡迎學(xué)習(xí)Go語言!)4、函數(shù)的用法作回調(diào)函數(shù)package mainimport ( fmtmath)func main() /調(diào)用函數(shù),對每個元素進求平方根操作arr := float641, 9, 16, 25, 30visit(arr, func(v float64) v = math.Sqrt(v)fmt.Prf(%.2f n, v)/調(diào)用函數(shù),對每個元素進求平方操作visit(arr, func(v float64) v = math.(v , 2)fmt.Prf(%.0f n, v)/定義
14、一個函數(shù),遍歷切片元素,對每個元素進處func visit(list float64, f func(float64) for , value := range list f(value)(六)、閉包1、概念:閉包并是么新奇的概念,它早在高級語言開始發(fā)展的代就產(chǎn)生。閉包(Closure)是詞法閉包(Lexical Closure)的簡稱。對閉包的具體定義有很多種說法,大體可以分為兩類:一種說法認為閉包是符合一定條件的函數(shù),比如這樣定義閉包:閉包是在其詞法上下文中引用自由變的函數(shù)。另一種說法認為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組的實體。比如這樣的定義:在實現(xiàn)深約束時,需要創(chuàng)建一個能顯式表示引用環(huán)
15、境的東西,并將它與相關(guān)的子程序在一起,這樣起來的整體被稱為閉包。函數(shù) 引用環(huán)境 C 閉包上面的定義,一個認為閉包是函數(shù),另一個認為閉包是函數(shù)和引用環(huán)境組成的整體。顯然第二種說法確切。閉包只是在形式和表現(xiàn)上像函數(shù),但實際上是函數(shù)。函數(shù)是一些可執(zhí)的代碼,這些代碼在函數(shù)被定義后就確定,會在執(zhí)時發(fā)生變化,所以一個函數(shù)只有一個實。閉包在運時可以有多個實,同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生同的實。閉包在某些編程語言中被稱為J.8=.表達式。函數(shù)本身任何信息,只有與引用環(huán)境結(jié)合后形成的閉具有“記憶性”。函數(shù)是編譯靜態(tài)的概念,而閉包是運期動態(tài)的概念。對象是附有為的數(shù)據(jù),而閉包是附有數(shù)據(jù)的為。、閉包的價值(!
16、)、加強模塊化閉包有益于模塊化編程,它能以簡單的方式開發(fā)較小的模塊,從而提高開發(fā)速度和程序的可復(fù)用性。和沒有使用閉包的程序相比,使用閉包可將模塊劃分得小。比如要計算一個數(shù)組中所有數(shù)字的和,這只需要循環(huán)遍歷數(shù)組,把遍歷到的數(shù)字加起來就。如果現(xiàn)在要計算所有元素的積呢?要打印所有的元素呢?解決這些問題都要對數(shù)組進遍歷,如果是在支持閉包的語言中,得一次又一次重復(fù)地寫循環(huán)語。而這在支持閉包的語言中是必要的。這種處方法多少有點像回調(diào)函數(shù),過要比回調(diào)函數(shù)寫法簡單,功能強大。()、抽象閉包是數(shù)據(jù)和為的組合,這使得閉包具有較好抽象能。(%)、簡化代碼%、一個編程語言需要哪些特性來支持閉包呢?函數(shù)是一階值(+,-
17、.) .-01,一等公民),即函數(shù)可以作為另一個函數(shù)的返回值或參數(shù),還可以作為一個變的值。函數(shù)可以嵌套定義,即在一個函數(shù)可以定義另一個函數(shù)。允許定義函數(shù)??梢圆东@引用環(huán)境,并把引用環(huán)境和函數(shù)代碼組成一個可調(diào)用的實體;4、案代碼一(1)、沒有使用閉計數(shù)的代碼package main import fmt func main() for i := 0; i 5; i+ fmt.Prfmt.Prf(i=%d t, i)ln(add2(i)func add2(x)sum := 0 sum += x return sum運結(jié)果:i=0 i=1 i=2 i=3i=401234for循環(huán)每執(zhí)一次,sum都會
18、清零,沒有實現(xiàn)sum累加計數(shù)。(2)、使用閉包函數(shù)實現(xiàn)計數(shù):package main import fmt func main() := adder()for i := 0; i 10; i+ fmt.Prfmt.Prf(i=%d t, i)ln(i)fmt.Prln()for i := 0; i 10; i+ fmt.Prfmt.Prf(i=%d t, i)ln(i)func adder() func() sum := 0return func(x)fmt.Prf(sum1=%d t, sum)sum += xfmt.Prf(sum2=%d t, sum)return sum運結(jié)果為:i=0
19、 i=1 i=2 i=3i=4sum1=0 sum1=0 sum1=1 sum1=3sum1=6sum2=0 sum2=1 sum2=3 sum2=6sum2=10013610i=0 i=1 i=2 i=3i=4sum1=10 sum1=10 sum1=11 sum1=13sum1=16sum2=10 sum2=11 sum2=13 sum2=16sum2=2010111316205、案代碼二 package main import fmt func main() myfunc := Counter()/fmt.Prf(%Tn, myfunc)fmt.Prln(myfunc, myfunc)/
20、* 調(diào)用 myfunc 函數(shù),i 變自增 1 并返回 */fmt.Pr fmt.Prfmt.Prln(myfunc()ln(myfunc()ln(myfunc()/* 創(chuàng)建新的函數(shù) nextNumber1,并查看結(jié)果 */myfunc1 := Counter()fmt.Pr fmt.Prfmt.Prln(myfunc1, myfunc1) ln(myfunc1()ln(myfunc1()/計數(shù).閉包函數(shù)func Counter() func()i := 0res := func()i += 1return i/fmt.Prf(%T , %v n , res , res) /func(), 0
21、x1095af0fmt.Prln(Counter中的函數(shù):, res) /0 x1095af0return res(七)、可變參數(shù)1、如果一個函數(shù)的參數(shù),類型一致,但個數(shù)定,可以使用函數(shù)的可變參數(shù)。2、語法格式:func 函數(shù)名(參數(shù)名 .類型) (返回值表) /函數(shù)體該語法格式定義一個接受任何數(shù)目、任何類型參數(shù)的函數(shù)。這特殊的語法是三個點“.”,在一個變后面加上三個點后,表示從該處開始接受定參數(shù)。當(dāng)要傳遞若干個值到定參數(shù)函數(shù)中得時候,可以手動書寫每個參數(shù),也可以將一個slice傳遞給該函數(shù),通過.可以將slice中的參數(shù)對應(yīng)的傳遞給函數(shù)。3、案代碼:計算學(xué)員package mainimpor
22、t ( fmt)func main() /1、傳進n個參數(shù)總成績及平均成績sum, avg, count := GetScore(90, 82.5, 73, 64.8)fmt.Prf(學(xué)員共有%d門成績,總成績?yōu)椋?.2f,平均成績?yōu)椋?.2f,count, sum, avg)fmt.Prln()/ 2、傳切片作為參數(shù)scores := float6492, 72.5, 93, 74.5, 89, 87, 74sum, avg, count = GetScore(scores.)fmt.Prf(學(xué)員共有%d門成績,總成績?yōu)椋?.2f,平均成績?yōu)椋?.2f, count, sum, avg)/累
23、加求和,參數(shù)個數(shù)定,參數(shù)個數(shù)從0-nfunc GetScore(scores .float64) (sum, avg float64, countfor , value := range scores sum += valuecount+avg = sum / float64(count)return) 4、可變參數(shù)注意細節(jié):一個函數(shù)最多只能有一個可變參數(shù)參數(shù)表中還有其它類型參數(shù),則可變參數(shù)寫在所有參數(shù)的最后(八)、遞歸函數(shù)1、在函數(shù),可以調(diào)用其他函數(shù)。如果一個函數(shù)在調(diào)用自身本身,這個函數(shù)就是遞歸函數(shù)。遞歸函數(shù)必須滿足以下兩個條件:在每一次調(diào)用自己時,必須是(在某種意義上)接近于解;必須有一個
24、終止處或計算的準則。2、案代碼:求階乘計算階乘n! = 1 x 2 x 3 x . x n,用函數(shù)fact(n)表示,可以看出:fact(n) = n! = 1 x 2 x 3 x . x (n-1) x n = (n-1)! x n = fact(n-1) x n。所以,fact(n)可以表示為n x fact(n-1),只有n=1時需要特殊處。package mainimport fmt func main() fmt.Prln(factorial(5)/通過遞歸實現(xiàn)階乘func factorial(nif n = 0 return 1)return n * factorial(n-1)/
25、通過循環(huán)實現(xiàn)階乘func getMultiple(num result = 1for i:=1; i factorial(5)= 5 * factorial(4)= 5 * (4 * factorial(3)= 5 * (4 * (3 * factorial(2)= 5 * (4 * (3 * (2 * factorial(1)= 5 * (4 * (3 * (2 * 1)= 5 * (4 * (3 * 2)= 5 * (4 * 6)= 5 * 24= 120遞歸函數(shù)的優(yōu)點是定義簡單,邏輯清晰。論上,所有的遞歸函數(shù)都可以用循環(huán)的方式實現(xiàn),但循環(huán)的邏輯如遞歸清晰。使用遞歸函數(shù)需要注意防止棧溢出。
26、在計算機中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,每當(dāng)進入一個函數(shù)調(diào)用,棧就會加一層 棧,每當(dāng)函數(shù)返回,棧就會減一層。由于棧的大小是無限的,所以,遞歸調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出。使用遞歸函數(shù)的優(yōu)點是邏輯簡單清晰,缺點是過深的調(diào)用會導(dǎo)致棧溢出。二、指針(一)、指針的概述1、指針是另一個變的內(nèi)存地址的變。變是一種使用方的占位符,變都指向計算機的內(nèi)存地址。一個指針變可以指向任何一個值的內(nèi)存地址。如下圖:變b的值為156,地址,則a被認為指向b。在內(nèi)存地址0 x1040a124。變a持有b的2、獲取變的地址Go 語言的取地址符&,一個變前使用&,會返回該變的內(nèi)存地址。func main(
27、) a := 10fmt.Prf(變的地址: %x n, &a)運結(jié)果:變的地址: c4200140503、Go語言指針的特點:Go語言指針的最大特點是:指針能運算(同于C語言)。在Go語言中如果對指針進運算會報錯:nvalid operation: p+ (non- numeric type *)(二)、指針1、指針,*T是指針變的類型,它指向T類型的值。var 指針變名 *指針類型* 號用于指定變是一個指針。var ip */指向整型的指針var fp *float32/指向浮點型的指針2、如何使用指針?(指針使用流程)定義指針變。為指針變賦值。指針變中指向地址的值。獲取指針的值:在指針類
28、型的變前加上 * 號(前綴)來獲取指針所指向的內(nèi)容。獲取一個指針意味著指針指向的變的值。語法是:*a3、示代碼一:func main() /var a實際變= 120/指針變var ip */給指針變賦值,將變a的地址賦值給ipip = &a/打印a的類型和值fmt.Prf(a 的類型是%T,值是%v n, a, a)/打印&a的類型和值fmt.Prf(&a 的類型是%T,值是%v n, &a, &a)/打印ip的類型和值fmt.Prf(ip 的類型是%T,值是%v n, ip, ip)/打印變*ip的類型和值fmt.Prf(*ip 變的類型是%T,值是%v n, *ip, *ip)/打印變*
29、&a的類型和值fmt.Prf(*&a 變的類型是%T,值是%v n, *&a, *&a)fmt.Prfmt.Prln(a, &a, *&a)ln(ip, &ip, *ip, *(&ip), &(*ip)運結(jié)果:a 的類型是,值是120&a 的類型是*,值是0 xc420014050ip 的類型是*,值是0 xc420014050*ip 變的類型是,值是120*&a 變的類型是,值是120120 0 xc420014050 1200 xc420014050 0 xc42000c028 120 0 xc420014050 0 xc4200140504、示代碼二:package mainimport
30、 fmttype Student struct nameagestringmarried boolsex8func main() var s1 = StudentSteven, 35, true, 1var s2 = StudentSunny, 20, false, 0var a *Student = &s1 /將s1的內(nèi)存地址賦值給Student指針變avar b *Student = &s2 /將s2的內(nèi)存地址賦值給Student指針變bfmt.Pr fmt.Prfmt.Prln(n)f(s1類型為%T,值為%v n, s1, s1) f(s2類型為%T,值為%v n, s2, s2)fm
31、t.Prfmt.Pr fmt.Prln(n)f(a類型為%T,值為%v n, a, a) f(b類型為%T,值為%v n, b, b)fmt.Pr fmt.Prfmt.Prln(n)f(*a類型為%T,值為%v n, *a, *a) f(*b類型為%T,值為%v n, *b, *b)fmt.Pr fmt.Prfmt.Prln(n)ln(, s1.age, s1.married, s1.sex) ln(, a.age, a.married, a.sex)fmt.Pr fmt.Prfmt.Prln(n)ln(, s2.age, s2.married, s2.
32、sex) ln(, b.age, b.married, b.sex)fmt.Pr fmt.Prfmt.Prln(n)ln(*a).name, (*a).age, (*a).married, (*a).sex)ln(*b).name, (*b).age, (*b).married, (*b).sex)fmt.Pr fmt.Prfmt.Prln(n)f(&a類型為%T,值為%vn, &a, &a) f(&b類型為%T,值為%vn, &b, &b)fmt.Prfmt.Pr fmt.Prln(n)ln(&, &a.age, &a.married, &a.sex) ln(&b.n
33、ame, &b.age, &b.married, &b.sex)運結(jié)果:s1類型為main.Student,值為Steven 35 true 1s2類型為main.Student,值為Sunny 20 false 0a類型為*main.Student,值為&Steven 35 true 1b類型為*main.Student,值為&Sunny 20 false 0*a類型為main.Student,值為Steven 35 true 1*b類型為main.Student,值為Sunny 20 false 0Steven 35 true 1Steven 35 true 1Sunny 20 false
34、 0Sunny 20 false 0Steven 35 true 1Sunny 20 false 0&a類型為*main.Student,值為0 xc42000c028&b類型為*main.Student,值為0 xc42000c0300 xc42000a060 0 xc42000a070 0 xc42000a078 0 xc42000a0790 xc42000a080 0 xc42000a090 0 xc42000a098 0 xc42000a099(四)、空指針1、Go 空指針當(dāng)一個指針被定義后沒有分配到任何變時,它的值為 nil。 nil 指針也稱為空指針。nil在概念上和其它語言的nu
35、ll、None、NULL一樣,都指代零值或空值。一個指針變通??s寫為 ptr。2、空指針判斷:if(ptr != nil)if(ptr = nil)/ ptr 是空指針/ ptr 是空指針(五)、操作指針改變變的數(shù)值1、示代碼: package main import (fmt)func main() b := 3158a := &bfmt.Prln(b 的地址:, a) /0 xc420014050fmt.Prln(*a 的值:, *a) /3158*a+fmt.Prln(b 的新值:, b)/3159運結(jié)果b 的地址: 0 xc420014050*a 的值:3158b 的新值: 3159(
36、六)、使用指針作為函數(shù)的參數(shù)1、示代碼一(基本數(shù)據(jù)類型指針作為函數(shù)參數(shù))package mainimport ( fmt)func main() a := 58fmt.Pr fmt.Prfmt.Prln(函數(shù)調(diào)用之前a的值:, a) f(%T n, a)f(%x n, &a)/b := &avar b *= &achange(b)fmt.Prln(函數(shù)調(diào)用之后的a的值:, a)func change(val *val = 15運結(jié)果) 函數(shù)調(diào)用之前a的值: 58c420014050函數(shù)調(diào)用之后的a的值: 152、示代碼二: package main import fmt func main()
37、 /* 定義局部變 */a := 100b := 200/返回值的寫法a, b = swap0(a, b)/指針作為參數(shù)的寫法swap(&a, &b)fmt.Prfmt.Prf(交換后 a 的值 : %dn, a)f(交換后 b 的值 : %dn, b)/具有返回值的慣用寫法func swap0(x, y) (,) return y, x/指針作為參數(shù)的寫法func swap(x *, y *x, *y = *y, *x) 3、示代碼二:(將一個指向切片的指針傳遞給函數(shù))雖然將指針傳遞給一個切片作為函數(shù)的參數(shù),可以實現(xiàn)對該切片中元素的修改,但這并是實現(xiàn)這一目標的慣用方法。慣用做法是使用切片。p
38、ackage mainimport fmtfunc main() a := 389, 90, 91modify(&a)fmt.Prln(a)func modify(arr *3 (*arr)0 = 189運結(jié)果 189 90 91) 【備注:】建議做法是使用切片來實現(xiàn)改元素數(shù)值,代碼如下:package main import fmt func main() a := 89, 90, 91modify(a:)fmt.Prln(a)func modify(sls sls0 = 190) (七)、指針數(shù)組1、指針數(shù)組:就是元素為指針類型的數(shù)組。定義一個指針數(shù)組,如:var ptr 3*string ;有一個元素個數(shù)相同的數(shù)組,將該數(shù)組中每個元素的地址賦值給該指針數(shù)組。也就是說該指針數(shù)組與某一個數(shù)組完全對應(yīng)??梢酝ㄟ^*指針變獲取到該地址所對應(yīng)的數(shù)值。2、案代碼:packag
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 直銷店鋪規(guī)范制度
- 語言規(guī)范使用制度
- 網(wǎng)絡(luò)安全使用制度規(guī)范
- 規(guī)范臺帳資料制度
- 放映場所安全規(guī)范制度
- 行政部規(guī)范化管理制度
- 飯店行為規(guī)范制度
- 規(guī)范婦科門診管理制度
- 2026鋼琴考級教材版本說明試題及答案
- 2026復(fù)變函數(shù)基礎(chǔ)知識點檢測試卷及答案
- 2025年N1叉車司機考試試題(1000題)(含答案)
- 醫(yī)院醫(yī)療質(zhì)量分析會
- 鐵路甲供料管理辦法
- 酒吧廚房小吃承包協(xié)議書
- 項目系統(tǒng)測試報告模板
- 2025國開電大知識產(chǎn)權(quán)法形考作業(yè)1234答案
- 網(wǎng)約車分公司管理制度
- 社區(qū)文藝團隊管理制度
- 2025至2030中國拆除工程行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- 國企黨務(wù)筆試試題及答案
- T/CSTE 0431-2023綠色(低碳)產(chǎn)品評價要求隔聲型節(jié)能鋁合金門窗
評論
0/150
提交評論