結構體作為map中的value
我們使用make開辟了一個map的空間,并且int為鍵結構體的student為值。
我們建立了101和102并且給student指派。
如果想要删除,就用delete方法删除m中的鍵。
這個value的類型是一個切片,一個鍵中的value可以有多個值可以用append方法添加值。
結構體作為函數參數
首先我們使用自定義類型建立了一個stu,然後作為函數參數傳過去,在test中的方法中改變了名字,但是最後輸出的結果中并沒有改變,是以變量作為函數參數是值傳遞。
将結構體作為map中的value并且将map作為函數參數傳遞。如果我們要改變傳過來的值,我們要先将map中鍵為102的值賦給stu,然後将stu的值改變,再将stu的值重新指派給m中的鍵為102的值。這樣就在test1方法中改變了map的值。
指針的定義和使用
var p *int = &a 就是定義一個指針變量存儲變量的值。*p就是對a的值進行寫的操作。
指針變量作為函數參數
&變量 取位址操作 引用運算符
*指針變量 取值操作 解引用運算符
p := &a 自動推導類型建立指針變量,就不用var了。
我們将a和b的位址傳遞過去,然後經過解位址交換a和b的值。就達到了交換的效果。
數組指針
定義一個指針指向數組就是數組指針。p := &arr 通過自動推導類型建立數組指針。也可以先用 var p *[10]int定義一個指針,然後指向數組。
将數組指針作為函數參數:
上面我們通過自動推導類型建立了一個數組指針,然後将數組指針作為函數參數傳過去。最後的輸出的結果是排好序的結果。
是以數組指針作為函數參數傳遞是位址傳遞。
我們可以根據(*p)[1]=222 對數組指針先解引用然後指派,也可以不用,因為數組指針可以直接操作數組元素。
指針數組
數組指針是定義一個指針指向數組,而指針數組是數組的元素是指針。
這個就是二維數組的模型。我們定義了三個數組,然後再定義一個指針數組将a,b,c的位址放在指針數組中。這樣就是一個二維數組的模型了。
同樣我們操作的時候要用(*arr[1])[1]= 555的形式對數組指派。注意要用括号
指針和切片
定義一個切片然後用自動推導類型讓指針和切片建立關系。
切片的指針不能像數組那樣不用加括号就可以,切片指針需要加上括号才可以。
切片指針作為函數參數。
test2不能改變s中的值,雖然傳過去的值是一個位址,因為切片本身就是一個位址。如果用test2改變s中的值,我們還需要傳回s的值。
如果不用傳回值就能改變s的值,我們需要用切片指針作為函數參數。
結構體和指針
我們定義了一個per為person的結構體。然後p := &per定義指針接收結構體變量位址。
同樣我們可以像數組一樣,指針可以直接操作結構體成員。
結構體指針作為函數參數是位址傳遞,形參可以改變實參的值。
指向結構體數組的指針。
上面中我們定義了一個數組指針,然後建立記憶體空間存儲[3]int。
多級指針
*就是解位址,&就是取位址。