Go語言基礎之指標

2021-10-14 16:44:11 字數 3527 閱讀 1770

作為21世紀的c語言,go可能多方面思考,最終還是保留了指標

因為go語言是類c語言,所以為了提高效率,仍然保留了指標。

但是如果沒有接觸過指標,可能學起來指標需要多多思考一下了。

指標通常情況下,也被稱為小白勸退神奇。

先看這兩行**。

var n1 int

=666

fmt.

println

(n1)

//結果:666

fmt.

printf

("%p\n",n1)

//結果:%!p(int=666),說明不是乙個位址,就是乙個值

記憶體分布圖如下。

再看看這樣兩行**,這裡用到了&

var n1 int=1

//表示取n1的位址

fmt.

println

(&n1)

//結果:0xc00000a0b8

fmt.

printf

("%p\n",&n1)

//結果:0xc00000a0b8

如圖所示。

理解的話就這幾句

預設只會操作記憶體位址上面的

如果是指標,記憶體上面的值存的就是位址,

如果這兩個能理解,恭喜你,指標已經會了一半了。

先看這樣的**。

var studentlist =

string

//乙個切片

fmt.

println

(studentlist)

//結果:[張三 李四]

fmt.

printf

("%p\n", studentlist)

//結果:0xc0000044a0

//去位址

fmt.

printf

("%p\n", &studentlist)

//結果:0xc0000044a0

記憶體分布圖如下。

在go中,值型別主要有。

intfloatboolstring陣列struct(結構體)

記憶體分布大致如下。

注:像字串陣列結構體這些屬於連續儲存,變數指向的是它們的第乙個位址,剩下的會根據長度計算。

在go中,引用型別主要有。

切片(slice)map管道(chan)

記憶體分布大致如下。

棧內存在儲存上,只能存一些簡單的東西,比如數字了字元了浮點數了之類的,但是棧記憶體分配的記憶體程式設計師不用**,由系統自己**,並且效能很高。

堆內存在儲存上就比較豐富了,隨便存,像map,隨便塞,但是堆記憶體分配的記憶體需要程式設計師自己**,典型例子,c++,如果語言由gcgc**,效能稍弱那麼一點點點…,但是人家能隨便存啊,多隨便。

&叫做取位址符。

*叫做收位址符吧。

示例

var c *

int//*int是乙個整體,說明c這個變數只能接收int型別的

*int是乙個整體,表示c這個變數只能接收**int型別位址**。

**

package main

import

"fmt"

func

main()

執行結果。

可以看到列印的也是乙個位址,但是記憶體圖還是基本型別圖。

如果要列印c的值,直接*c就好了,取得就是位址裡面對應得值了。

fmt.

println

(*c)

我們一直在強調,操作只會操作上面的,函式同理。

package main

import

"fmt"

func

say1

(x int

)func

say2

(x *

int)

func

say3

(x [

]int

)func

main()

say3

(x2)

//x2是引用型別,所以傳進去的時候就是位址,棧上面的就是位址

}

執行結果。

上述我們主要講述了基本型別指標引用型別指標,也叫做值型別引用型別

並且畫出了值型別引用型別記憶體的本質區分圖

後來又講了&*的區別,還有函式傳參的本質是什麼

我是碼農星期八,如果覺得還不錯,記得動手點讚一下哈。

感謝你的**。

Go語言基礎之指標

go語言中的函式傳參都是值拷貝,當想修改某個變數時,就使用指標來操作。go中的指標 取位址 根據位址取值 每個變數在執行時都有乙個記憶體位址。go中使用 變數名,對變數進行取位址操作。go中的值型別 int float bool string array struct 都有對應的指標型別如 int ...

Go語言基礎之指標

區別於c c 中的指標,go語言中的指標不能進行偏移和運算,是安全指標。go語言中的函式傳參都是值拷貝,當我們想要修改某個變數的時候,我們可以建立乙個指向該變數位址的指標變數。傳遞資料使用指標,而無須拷貝資料。型別指標不能進行偏移和運算。go語言中的指標操作非常簡單,只需要記住兩個符號 取位址 和 ...

十四 Go語言基礎之指標

區別於c c 中的指標,go語言中的指標不能進行偏移和運算,是安全指標。任何程式資料載入記憶體後,在記憶體都有他們的位址,這就是指標。而為了儲存乙個資料在記憶體中的位址,我們就需要指標變數。比如,永遠不要高估自己 這句話是我的座右銘,我想把它寫入程式中,程式一啟動這句話是要載入到記憶體 假設記憶體位...