指標詳解
- 基本介紹
- 指標地址
- 指標型別
- 指標取值
- 指標使用細節
基本介紹
區別于C/C++中的指標,Go語言中的指標不能進行偏移和運算,是安全指標,
Go語言中的函式傳參都是值拷貝,當我們想要修改某個變數的時候,我們可以創建一個指向該變數地址的指標變數,傳遞資料使用指標,而無須拷貝資料,型別指標不能進行偏移和運算,Go語言中的指標操作非常簡單,只需要記住兩個符號:&(取地址)和*(根據地址取值),
指標地址
每個變數在運行時都擁有一個地址,這個地址代表變數在記憶體中的位置,Go語言中使用&字符放在變數前面對變數進行“取地址”操作, Go語言中的值型別(int、float、bool、string、array、struct)都有對應的指標型別,如:*int、*int64、*string等,
比如:var i int,獲取num的地址:&i.
package main
import "fmt"
func main(){
var i int = 10
// i的地址
fmt.Println("i的地址 =",&i)
}

基本資料型別在記憶體中的布局,

指標型別
指標變數存的是一個地址,這個地址指向的空間存的才是值,
package main
import "fmt"
func main(){
//基本資料型別在記憶體布局
var i int = 10
// i的地址
fmt.Println("i的地址 =",&i)
//ptr是一個指標變數
//ptr的型別是 *int
//ptr本身的值&i
var ptr *int = &i
fmt.Printf("ptr =%v\n",ptr)
}
運行結果:

記憶體布局圖:

指標取值
在對普通變數使用&運算子取地址后會獲得這個變數的指標,然后可以對指標使用*操作,也就是指標取值,代碼如下,
package main
import "fmt"
func main(){
//指標取值
a := 10
//取變數a的地址,將指標保存到b中
ptr := &a
fmt.Printf("type of ptr: %T\n",ptr)
//指標取值(根據指標去記憶體取值)
c := *ptr
fmt.Printf("type of c:%T\n",c)
fmt.Printf("type of c:%v\n",c)
}
運行結果:

指標使用細節
- 值型別,都有對應的指標型別,形式為*資料累次那個,比如int的對應指標就是 * int,依次類推,
- 值型別包括:基本資料型別 int系列,float系列,bool,string,陣列和結構體struct,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262156.html
標籤:其他
上一篇:form表單
下一篇:網路攻擊概述
