golang 指針

指針


1、簡單的定義一個指針

package main

import "fmt"

func main(){
	var p *int
	i :=2
	p = &i
	fmt.Println("memory address i:",p)
}
//執行結果:
memory address i: 0xc42000a2e0


2、打印指針的值

package main

import "fmt"

func main(){
	var p *int
	i :=2
	p = &i
	fmt.Println("memory address i:",p)
	fmt.Println(*p)
}
//執行結果:
memory address i: 0xc42000a2e0
2

3、指針賦值

package main

import "fmt"

func main(){
	var p *int
	i :=2
	p = &i
	fmt.Println("memory address i:",p)
	fmt.Println(*p)
	*p = 3
	fmt.Println(*p)
	fmt.Println(i)
}
//執行結果:
memory address i: 0xc42000a2e0
2
3
3    //我們發現*p 和 i的值都變了,因爲指針地址是一個。

4、指針值拷貝與指針值更改

package main

import "fmt"


func changValue(x int){
	x = 20
}

func changValueNow(x *int){
        *x = 20
}



func main(){
	var p *int
	i :=2
	p = &i
	fmt.Println("memory address i:",p)
	fmt.Println("memory address p:",&i)
	fmt.Println(*p)
	*p = 3
	fmt.Println(*p)
	fmt.Println(i)
	changValue(i)
	fmt.Println("i =",i)
	changValueNow(&i)
	fmt.Println("now i:",i)
}
//執行結果:
memory address i: 0xc42000a2e0
memory address p: 0xc42000a2e0
2
3
3
i = 3          //傳過去3,改爲20,打印i還是3 說明這種只是值拷貝並沒更改本身
now i: 20      //傳過去一個指針地址,將地址值改爲20,打印i是20,傳遞指針內存地址修改將改變指針的值。

5、指針申明

package main

import "fmt"


func changValue(x int){
	x = 20
}

func changValueNow(x *int){
        *x = 20
}



func main(){
	var p *int
	i :=2
	p = &i
	fmt.Println("memory address i:",p)
	fmt.Println("memory address p:",&i)
	fmt.Println(*p)
	*p = 3
	fmt.Println(*p)
	fmt.Println(i)
	changValue(i)
	fmt.Println("i =",i)
	changValueNow(&i)
	fmt.Println("now i:",i)

	pj := new(int)  //使用new 創建一個int型的指針
	changValueNow(pj)
	fmt.Println("pj = ",*pj)
}
//執行結果:
memory address i: 0xc42000a2e0
memory address p: 0xc42000a2e0
2
3
3
i = 3
now i: 20
pj =  20

6、golang中沒有指針的運算操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章