天天看點

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

結構體作為map中的value

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

我們使用make開辟了一個map的空間,并且int為鍵結構體的student為值。

我們建立了101和102并且給student指派。

如果想要删除,就用delete方法删除m中的鍵。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

這個value的類型是一個切片,一個鍵中的value可以有多個值可以用append方法添加值。

結構體作為函數參數

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

首先我們使用自定義類型建立了一個stu,然後作為函數參數傳過去,在test中的方法中改變了名字,但是最後輸出的結果中并沒有改變,是以變量作為函數參數是值傳遞。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針
go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

将結構體作為map中的value并且将map作為函數參數傳遞。如果我們要改變傳過來的值,我們要先将map中鍵為102的值賦給stu,然後将stu的值改變,再将stu的值重新指派給m中的鍵為102的值。這樣就在test1方法中改變了map的值。

指針的定義和使用

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

var p *int = &a 就是定義一個指針變量存儲變量的值。*p就是對a的值進行寫的操作。

指針變量作為函數參數

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針
go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

&變量 取位址操作 引用運算符

*指針變量 取值操作 解引用運算符

p := &a 自動推導類型建立指針變量,就不用var了。

我們将a和b的位址傳遞過去,然後經過解位址交換a和b的值。就達到了交換的效果。

數組指針

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

定義一個指針指向數組就是數組指針。p := &arr 通過自動推導類型建立數組指針。也可以先用 var p *[10]int定義一個指針,然後指向數組。

将數組指針作為函數參數:

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

上面我們通過自動推導類型建立了一個數組指針,然後将數組指針作為函數參數傳過去。最後的輸出的結果是排好序的結果。

是以數組指針作為函數參數傳遞是位址傳遞。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

我們可以根據(*p)[1]=222 對數組指針先解引用然後指派,也可以不用,因為數組指針可以直接操作數組元素。

指針數組

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

數組指針是定義一個指針指向數組,而指針數組是數組的元素是指針。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

這個就是二維數組的模型。我們定義了三個數組,然後再定義一個指針數組将a,b,c的位址放在指針數組中。這樣就是一個二維數組的模型了。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

同樣我們操作的時候要用(*arr[1])[1]= 555的形式對數組指派。注意要用括号

指針和切片

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

定義一個切片然後用自動推導類型讓指針和切片建立關系。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

切片的指針不能像數組那樣不用加括号就可以,切片指針需要加上括号才可以。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

切片指針作為函數參數。

test2不能改變s中的值,雖然傳過去的值是一個位址,因為切片本身就是一個位址。如果用test2改變s中的值,我們還需要傳回s的值。

如果不用傳回值就能改變s的值,我們需要用切片指針作為函數參數。

結構體和指針

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

我們定義了一個per為person的結構體。然後p := &per定義指針接收結構體變量位址。

同樣我們可以像數組一樣,指針可以直接操作結構體成員。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

結構體指針作為函數參數是位址傳遞,形參可以改變實參的值。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

指向結構體數組的指針。

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

上面中我們定義了一個數組指針,然後建立記憶體空間存儲[3]int。

多級指針

go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針
go語言學習筆記7,結構體與map、函數參數,指針的定義和使用,指針和數組、切片、結構體,多級指針

*就是解位址,&就是取位址。