golang学习笔记(指针)

  1. new
    new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值.
    new要点
    内置函数 new 分配空间.
    传递给new 函数的是一个类型,不是一个值.
    返回值是 指向这个新分配的零值的指针.
  2. make
    make(T, args) 返回的是初始化之后的 T 类型的值,这个新值并不是 T 类型的零值,也不是指针 *T,是经过初始化之后的 T 的引用.
    make 只能用于 slice,map,channel 三种类型, 并且只能是这三种对象. 和 new 一样,第一个参数是 类型,不是一个值.
    nil 是 map、slice、pointer、channel、func、interface 的零值

指针数组

指针数组指的是一个数组中存储的都是指针(也就是地址)

二级指针

var numa = 100
var numb = 200
func changePp(aa **int)  {
	*aa = &numb

}
func main()  {
	var p *int = &numa
	fmt.Printf("main %p\n",&p)
	fmt.Println("main",p,*p)
	changePp(&p)
	fmt.Println("main",p,*p)

}
func main() {
	var moneys [5]int = [5]int{1,6,2,3,4}//假如不允许写入,不允许对数组操作,在不改变原数组的情况下,通过对地址排序对地址排序
	var pmoneys [5]*int//指针数组。每个元素是指针
	for i := 0; i < 5; i++ {
		pmoneys[i] = &moneys[i]
		fmt.Println(pmoneys[i],moneys[i])
	}
	for i := 0; i < len(pmoneys)-1; i++ {
		for j := 0; j < len(pmoneys)-i-1; j++ {
			if *pmoneys[j] > *pmoneys[j+1] {
				pmoneys[j],pmoneys[j+1] = pmoneys[j+1],pmoneys[j]
			}
		}
	}
	for i := 0; i < len(pmoneys); i++ {
		fmt.Println(*pmoneys[i],pmoneys[i])
	}
}

数组指针

是让一个指针指向数组 ,然后可以通过该指针来操作数组。

func main() {
	var num int = 10
	fmt.Printf("%p\n",&num)

	var p = &num
	*p = 4 //按照地址赋值内容
	fmt.Println(num)
}

你可能感兴趣的:(golang,指针,golang)