2020 10 16Go語言指標

2021-10-24 20:19:55 字數 1849 閱讀 2293

我們知道變數是用來儲存資料的,變數的本質是給儲存資料的記憶體位址起了乙個好記的別名。比如我們定義了乙個變數a:=10,這個時候可以直接通過a這個變數來讀取記憶體中儲存的10這個值。在計算機底層a這個變數其實對應了乙個記憶體位址。

指標也是乙個變數,但它是一種特殊的變數,它儲存的資料不是乙個普通的值,而是另乙個變數的記憶體位址。

要搞明白go語言中的指標需要先知道三個概念

每個變數在執行時都擁有乙個位址,這個位址代表變數再記憶體中的位置。go語言中使用 &字元放在變數前對變數進行取位址操作。go語言中的值型別(int float bool string array struct)都有對應的指標型別如:

*int、,*int64、*string等
取變數指標的語法如下:

ptr := &v
舉例:

在對普通變數進行&操作符取位址後,會獲得這個變數指標,然後可以對指標進行 *操作,也就是指標取值

package main

import "fmt"

func main()

一般來說,指標通常在函式傳遞引數,或者給某個型別定義新的方法時使用。go 語言中,引數是按值傳遞的,如果不使用指標,函式內部將會拷貝乙份引數的副本,對引數的修改並不會影響到外部變數的值。如果引數使用指標,對引數的傳遞將會影響到外部變數。

func add(num int) 

func realadd(num *int)

func main()

需要注意的是,指標必須在建立記憶體後才可以使用,這個和 slice 和 map是一樣的

// 引用資料型別map、slice等,必須使用make分配空間,才能夠使用

var userinfo = make(map[string]string)

userinfo["username"] = "zhangsan"

fmt.println(userinfo)

var array = make(int, 4, 4)

array[0] = 1

fmt.println(array)

對於指標的錯誤示範:

// 指標變數初始化

var a *int

*a = 100

fmt.println(a)

錯誤原因:在 golang 中,對於引用型別的變數,我們在使用的時候不僅要宣告它,還得為它分配記憶體空間,否則我們的值就沒有辦法儲存。而對於值型別的宣告不需要分配空間,是因為它們在宣告的時候已經預設分配好了記憶體空間。

golang中分配記憶體的函式主要是 new 和 make 

make之前已經演示過,new是乙個內建的函式,它的函式簽名如下:

func new(type) *type
實際開發中new函式不太常用,使用new函式得到的是乙個型別的指標,並且該指標對應的值為該型別的零值。舉個例子:

i := new(int)

fmt.printf("%t \n",i) //*int

fmt.println(i,*i) //0xc00000a0d8 0

*i = 123

fmt.println(i,*i) //0xc00000a0d8 123

Go 語言指標

b 什麼是指標 b 乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下 var var name var type var type 為指標型別,var name 為指標變數名,號用於指定變數是作為乙個指標。以下是有效的指標宣告 var ip int...

GO語言指標

以前學習的語言裡沒有指標操作,剛接觸到go語言指標,消化的比較慢,故寫一下。指標型別宣告 t,指標的型別為 t,例 var i int 指標型別的值 t 在等號左邊表示指標宣告var a int 32 p a p的值是指向a的位址在指標前加 獲取指標p指向的值,例 var a int 32 變數宣告...

Go語言指標

鏈客,專為開發者而生,有問必答!接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。package mainimport fmt func main 以上例項執行輸出結果為...