1 go語言中指針基本內容
package main
import "fmt"
func main() {
a := 5
fmt.Println("a的數值:", a)
fmt.Printf("a的類型:%T\n", a)
fmt.Printf("a的地址:%p\n", &a)
var p1 *int
fmt.Println(p1)
p1 = &a
fmt.Println("p1的數值:", p1)
fmt.Println("p1的地址:", &p1)
fmt.Println("p1的數值是a的地址,該地址存儲的值爲:", *p1)
a = 100
fmt.Println(a)
fmt.Printf("a的地址:%p", &a)
*p1 = 200
fmt.Println(a)
var p2 **int
p2 = &p1
fmt.Printf("%T,%T,%T\n", a, p1, p2)
fmt.Println("p1的地址:", p2)
fmt.Printf("p2自己的地址:%p\n", &p2)
fmt.Println("p2中存儲的地址,對應的數值,也就是p1的地址,對應的數據:", *p2)
fmt.Println("p2中存儲的地址,對應的數值,也就是p1的地址,p1地址對應的數據即a的數值:", **p2)
fmt.Print("--------------------------------\n")
arr1 := [4]int{1, 2, 3, 4}
fmt.Println(arr1)
var par1 *[4]int
par1 = &arr1
fmt.Println(par1)
fmt.Printf("%p\n", par1)
fmt.Printf("%p\n", &par1)
(*par1)[0] = 100
fmt.Println(arr1)
b := 1
c := 2
d := 3
e := 4
arr2 := [4]int{b, c, d, e}
arr3 := [4]*int{&b, &c, &d, &e}
fmt.Println(arr2)
fmt.Println(arr3)
arr2[0] = 100
fmt.Println(arr2)
fmt.Println(b)
*arr3[0] = 200
fmt.Println(arr3)
fmt.Println(b)
fmt.Print("--------------------------------\n")
var f1 func()
f1 = fun1
f1()
arr4 := fun2()
fmt.Printf("arr4的類型:%T,地址:%p,數值:%v\n", arr4, &arr4, arr4)
arr5 := fun3()
fmt.Printf("arr5的類型:%T,地址:%p,數值:%v\n", arr5, &arr5, arr5)
x := 100
fun4(&x)
fmt.Println("調用函數後x的值:", x)
y := [4]int{2, 3, 4, 5}
fun5(y)
fmt.Println("調用fun5函數後y的值:", y)
fun6(&y)
fmt.Println("調用fun6函數後y的值:", y)
}
func fun5(arr [4]int) {
fmt.Println("fun5函數中數組的值:", arr)
arr[0] = 50
fmt.Println("fun5函數修改數組後的的值:", arr)
}
func fun6(p *[4]int){
fmt.Println("fun6函數中數組的值:", p)
p[1] = 100
fmt.Println("fun6函數中修改數組後的值:", p)
}
func fun4(p1 *int) {
fmt.Println("fun4函數中p1:", *p1)
*p1 = 300
fmt.Println("fun4函數中修改後的p1:", *p1)
}
func fun1() {
fmt.Println("fun1...")
}
func fun2() [4]int {
arr := [4]int{7, 8, 9, 10}
return arr
}
func fun3() *[4]int {
arr := [4]int{1, 2, 3, 4}
return &arr
}