溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Golang中的指針怎么使用

發(fā)布時(shí)間:2023-04-28 15:26:51 來源:億速云 閱讀:124 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Golang中的指針怎么使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1.概念

指針:指向內(nèi)存地址的變量,指針用來存儲(chǔ)變量的內(nèi)存地址

Go 語言定義變量必須聲明數(shù)據(jù)類型,因?yàn)椴煌瑪?shù)據(jù)類型的數(shù)據(jù)占用不同的存儲(chǔ)空間,導(dǎo)致內(nèi)存地址分配大小各不相同,所有指針只能存放同一類型變量的內(nèi)存地址。

指針分為兩種:類型指針和切片指針

類型指針允許對(duì)數(shù)據(jù)進(jìn)行修改,直接使用指針傳遞數(shù)據(jù),無須復(fù)制數(shù)據(jù),但類型指針不能進(jìn)行偏移和運(yùn)算。

切片指針是切片類型的指針,它包含起始元素的原始指針、元素?cái)?shù)量和容量

  • 指針:也稱為指針變量,即用來存放內(nèi)存地址的變量,一般情況下,內(nèi)存地址的數(shù)據(jù)格式以0xcXXXXXXX表示,如0xc0000180a8或0xc0000ac058等

  • 指針是一個(gè)變量,也有自己的內(nèi)存地址,它存放的內(nèi)存地址是另一個(gè)變量的內(nèi)存地址

  • 指針類型:是指針存放的內(nèi)存地址的大小,比如指針a 定義為 int 類型,它只能存放整型變量的內(nèi)存地址,所以在使用指針的時(shí)候必須聲明指針類型,確保指針只能存放一種數(shù)據(jù)類型

  • 指針賦值:將某個(gè)變量的內(nèi)存地址賦值給指針,在某個(gè)變量前面使用取地址操作符“ & ”即可獲取變量的內(nèi)存地址

  • 指針取值:從指針變量中通過某個(gè)變量的內(nèi)存地址獲取對(duì)應(yīng)的數(shù)值,只需在指針變量前面使用取值操作符“ * ”即可

2.指針定義與空指針

語法格式

var name *type

name 代表指針變量名

type 是指針變量的數(shù)據(jù)類型,如數(shù)字、字符串、切片等Go語言內(nèi)置的數(shù)據(jù)類型

Go 語言的空值用 nil 表示

空指針:指針為空值

3.指針賦值與取值

在Go語言編程中,所有變量先定義后使用

// 定義一個(gè) int 類型的變量 name 并賦值 200
var name int = 200
// 定義一個(gè) int 類型的指針
var ptr *int
// 指針賦值,將 name 的內(nèi)存地址賦值給 ptr,通過取地址符“ & ”
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)增長和縮小

切片可以理解為動(dòng)態(tài)數(shù)組,并根據(jù)切片里的元素自動(dòng)調(diào)整切片長度

Go 語言的切片指針是以切片表示的,切片的每個(gè)元素只能存放內(nèi)存地址

切片指針的語法定義如下:

// 定義方式一
var name []*type
// 定義方式二
name := []*type{}

name 代表指針變量名

type 是指針變量的數(shù)據(jù)類型,如數(shù)字、字符串等 Go 語言內(nèi)置的數(shù)據(jù)類型

切片指針可以將多個(gè)變量的內(nèi)存地址存放在切片中,這樣方便管理多個(gè)變量

切片指針定義后,如果沒有設(shè)置初始值,默認(rèn)為空,由于切片是動(dòng)態(tài)數(shù)組,其數(shù)據(jù)長度能自動(dòng)調(diào)整,Go 語言不會(huì)分配內(nèi)存地址,因此無法通過取地址操作符 “ & ”獲取切片指針的內(nèi)存地址

5.指針的指針

指針的指針:是一個(gè)指針變量指向另一個(gè)指針變量,另一個(gè)指針變量指向某個(gè)變量

語法格式:

// 定義指針的指針
var name **type
// 從指針的指針獲取某個(gè)變量的值
v := **name

name 代表指針變量名,使用兩個(gè)取值操作符 “ * ”定義為指針的指針

type 是指針變量的數(shù)據(jù)類型,如數(shù)字、字符串、切片等Go 語言內(nèi)置的數(shù)據(jù)類型

v 是從指針的指針獲取某個(gè)變量的值,必須使用兩個(gè)取值操作符 “ * ”實(shí)現(xiàn)

以上就是“Golang中的指針怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI