package main

import "fmt"

func main() {
	var a int = 10

	fmt.Printf("a = %d\n", a)
	fmt.Printf("&a = %v\n", &a)

	var p *int
	p = &a
	fmt.Printf("p = %v,&a = %v\n", p, &a)

	*p = 666 // 给指针所指向的内存地址赋值
	fmt.Printf("p = %v, a = %v\n", *p, a)
}
package main

import "fmt"

func main() {
	var p *int
	p = nil
	fmt.Println("p = ", p)

	var a int
	p = &a
	*p = 666
	// p 内存地址
	// *p 内存地址的值
	fmt.Println(a, *p)
}

new一个指针:

package main

import "fmt"

func main() {
	var p *int
	p = new(int) // new一块内存给p,new()返回的是一个内存地址
	*p = 666     // 给这块内存赋值
	fmt.Println(*p)

	q := new(int)
	*q = 777
	fmt.Println(*q)
}

使用指针交换变量:

package main

import "fmt"

func swap(p1, p2 *int) {
	*p1, *p2 = *p2, *p1
}

func main() {
	a, b := 10, 20
	swap(&a, &b)
	fmt.Println(a, b)
}

指针做函数参数:

package main

import "fmt"

func modify(p *[5]int) {
	(*p)[3] = 666
	fmt.Println("*p = ", *p)
}

func main() {
	a := [5]int{1, 2, 3, 4, 5}
	modify(&a)
	fmt.Println("a = ", a)
}