(八)golang--複雜類型之指針

首先咱們要明確:
(1)基本數據類型:變量存的就是值,也叫值類型;數組

(2)獲取變量的地址,用&,例如var num int,獲取num的地址:#spa

(3)指針類型:變量存的是一個地址,這個地址指向的空間存的纔是值,例如var ptr *int = #指針

(4)獲取指針類型所指向的值,使用*,例如var *ptr int,使用*ptr獲取ptr指向的值;code

package main

import (
    "fmt"
)

func main() {
    var num int = 1
    var ptr *int = &num
    fmt.Println("num的地址是:", &num)
    fmt.Println("ptr的值是:", ptr)
    fmt.Println("ptr的地址是:", &ptr)
}

 

ptr是一個指針,它的值是num的地址,同時,它本身也會有一個地址。咱們能夠經過地址定位到變量並改變變量的值:blog

package main

import (
    "fmt"
)

func main() {
    var num int = 1
    var ptr *int
    fmt.Println("num的值是:", num)
    ptr = &num
    *ptr = 10
    fmt.Println("num的值是:", num)
}

 

 咱們還能夠經過切換指針的值來改變不一樣變量的值:注意指針類型與變量類型之間要匹配。內存

package main

import (
    "fmt"
)

func main() {
    var num1 int = 1
    var num2 int = 2
    var ptr *int
    fmt.Println("num1的值是:", num1)
    fmt.Println("num2的值是:", num2)
    ptr = &num1
    *ptr = 10
    ptr = &num2
    *ptr = 20
    fmt.Println("num1的值是:", num1)
    fmt.Println("num2的值是:", num2)
}

 

 指針使用細節:
(1)值類型,都有對應的指針,形式爲*數據類型,好比int對應的指針就是*int,float32對應的指針就是*float;string

(2)值類型包括:基本數據類型int系列、float系列、bool、string、數組和結構體;class

 

值類型和引用類型:import

(1)值類型包括:基本數據類型int系列、float系列、bool、string、數組和結構體;變量

(2)引用類型:指針、slice切片、map、管道channel、interface等;

值類型和引用類型的區別:
(1)值類型,變量直接存儲,內存一般在中分配;

(2)引用類型:變量存儲的是一個地址,這個地址對應的空間纔是真正存儲的數據值,內存一般在堆上分配,當沒有任何變量引用這個地址時,改地址對應的數據空間就是一個垃圾,由GC來回收;

相關文章
相關標籤/搜索