Golang中指針的使用詳解
1.概念
指針:指向內(nèi)存地址的變量,指針用來(lái)存儲(chǔ)變量的內(nèi)存地址
Go 語(yǔ)言定義變量必須聲明數(shù)據(jù)類(lèi)型,因?yàn)椴煌瑪?shù)據(jù)類(lèi)型的數(shù)據(jù)占用不同的存儲(chǔ)空間,導(dǎo)致內(nèi)存地址分配大小各不相同,所有指針只能存放同一類(lèi)型變量的內(nèi)存地址。
指針?lè)譃閮煞N:類(lèi)型指針和切片指針
類(lèi)型指針允許對(duì)數(shù)據(jù)進(jìn)行修改,直接使用指針傳遞數(shù)據(jù),無(wú)須復(fù)制數(shù)據(jù),但類(lèi)型指針不能進(jìn)行偏移和運(yùn)算。
切片指針是切片類(lèi)型的指針,它包含起始元素的原始指針、元素?cái)?shù)量和容量
- 指針:也稱(chēng)為指針變量,即用來(lái)存放內(nèi)存地址的變量,一般情況下,內(nèi)存地址的數(shù)據(jù)格式以0xcXXXXXXX表示,如0xc0000180a8或0xc0000ac058等
- 指針是一個(gè)變量,也有自己的內(nèi)存地址,它存放的內(nèi)存地址是另一個(gè)變量的內(nèi)存地址
- 指針類(lèi)型:是指針存放的內(nèi)存地址的大小,比如指針a 定義為 int 類(lèi)型,它只能存放整型變量的內(nèi)存地址,所以在使用指針的時(shí)候必須聲明指針類(lèi)型,確保指針只能存放一種數(shù)據(jù)類(lèi)型
- 指針賦值:將某個(gè)變量的內(nèi)存地址賦值給指針,在某個(gè)變量前面使用取地址操作符“ & ”即可獲取變量的內(nèi)存地址
- 指針取值:從指針變量中通過(guò)某個(gè)變量的內(nèi)存地址獲取對(duì)應(yīng)的數(shù)值,只需在指針變量前面使用取值操作符“ * ”即可
2.指針定義與空指針
語(yǔ)法格式
var name *type
name 代表指針變量名
type 是指針變量的數(shù)據(jù)類(lèi)型,如數(shù)字、字符串、切片等Go語(yǔ)言?xún)?nèi)置的數(shù)據(jù)類(lèi)型
Go 語(yǔ)言的空值用 nil 表示
空指針:指針為空值
3.指針賦值與取值
在Go語(yǔ)言編程中,所有變量先定義后使用
// 定義一個(gè) int 類(lèi)型的變量 name 并賦值 200 var name int = 200 // 定義一個(gè) int 類(lèi)型的指針 var ptr *int // 指針賦值,將 name 的內(nèi)存地址賦值給 ptr,通過(guò)取地址符“ & ” ptr = &name // 指針取值,在 ptr 前面使用 “ * ” 獲取 name 的值 name1 := *ptr /* & 取出內(nèi)存地址 * 根據(jù)內(nèi)存地址取出對(duì)應(yīng)的數(shù)值 */
4.切片指針
切片是一種比較特殊的數(shù)據(jù)結(jié)構(gòu),便于使用和管理數(shù)據(jù)集合
切片是圍繞動(dòng)態(tài)數(shù)組的概念構(gòu)建的,可以按需自動(dòng)增長(zhǎng)和縮小
切片可以理解為動(dòng)態(tài)數(shù)組,并根據(jù)切片里的元素自動(dòng)調(diào)整切片長(zhǎng)度
Go 語(yǔ)言的切片指針是以切片表示的,切片的每個(gè)元素只能存放內(nèi)存地址
切片指針的語(yǔ)法定義如下:
// 定義方式一 var name []*type // 定義方式二 name := []*type{}
name 代表指針變量名
type 是指針變量的數(shù)據(jù)類(lèi)型,如數(shù)字、字符串等 Go 語(yǔ)言?xún)?nèi)置的數(shù)據(jù)類(lèi)型
切片指針可以將多個(gè)變量的內(nèi)存地址存放在切片中,這樣方便管理多個(gè)變量
切片指針定義后,如果沒(méi)有設(shè)置初始值,默認(rèn)為空,由于切片是動(dòng)態(tài)數(shù)組,其數(shù)據(jù)長(zhǎng)度能自動(dòng)調(diào)整,Go 語(yǔ)言不會(huì)分配內(nèi)存地址,因此無(wú)法通過(guò)取地址操作符 “ & ”獲取切片指針的內(nèi)存地址
5.指針的指針
指針的指針:是一個(gè)指針變量指向另一個(gè)指針變量,另一個(gè)指針變量指向某個(gè)變量
語(yǔ)法格式:
// 定義指針的指針 var name **type // 從指針的指針獲取某個(gè)變量的值 v := **name
name 代表指針變量名,使用兩個(gè)取值操作符 “ * ”定義為指針的指針
type 是指針變量的數(shù)據(jù)類(lèi)型,如數(shù)字、字符串、切片等Go 語(yǔ)言?xún)?nèi)置的數(shù)據(jù)類(lèi)型
v 是從指針的指針獲取某個(gè)變量的值,必須使用兩個(gè)取值操作符 “ * ”實(shí)現(xiàn)
到此這篇關(guān)于Golang中指針的使用詳解的文章就介紹到這了,更多相關(guān)Golang指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Go語(yǔ)言bitset的實(shí)現(xiàn)原理
bitset包是一個(gè)將非負(fù)整數(shù)映射到布爾值的位的集合,這篇文章主要通過(guò)開(kāi)源包bitset來(lái)為大家分析一下位集合的設(shè)計(jì)和實(shí)現(xiàn),感興趣的可以學(xué)習(xí)一下2023-08-08淺談Golang數(shù)據(jù)競(jìng)態(tài)
本文主要介紹了淺談Golang數(shù)據(jù)競(jìng)態(tài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02關(guān)于Golang中range指針數(shù)據(jù)的坑詳解
這篇文章主要給大家介紹了關(guān)于Golang中range指針數(shù)據(jù)的坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02Go語(yǔ)言中如何確保Cookie數(shù)據(jù)的安全傳輸
這篇文章主要介紹了Go語(yǔ)言中如何確保Cookie數(shù)據(jù)的安全傳輸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例
這篇文章主要介紹了golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Go語(yǔ)言HTTP請(qǐng)求流式寫(xiě)入body的示例代碼
這篇文章主要介紹了Go語(yǔ)言HTTP請(qǐng)求流式寫(xiě)入body,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Golang并發(fā)繞不開(kāi)的重要組件之Goroutine詳解
Goroutine、Channel、Context、Sync都是Golang并發(fā)編程中的幾個(gè)重要組件,這篇文中主要為大家介紹了Goroutine的相關(guān)知識(shí),需要的可以參考一下2023-06-06