go语言的指针数组与数组指针

go语言的指针数组与数组指针

package main

import "fmt"

/**
Author: xym
Date: 2021/4/21 22:17
Project: Go_Learning
Description:
*/

//三个操作符的优先级:() > [] > *

func main() {
	a1 := [5]int{1, 2, 3, 4, 5}

	//指针数组:[n]*int 表示数组里每个元素都是 指针类型
	var p [5]*int
	for i := range a1 {
		p[i] = &a1[i]	//加&的原因是p中元素已经设定为指针类型,所以从a1中取出的元素也要变为指针类型
	}
	for j, k := range p {
		fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, *k, k)
	}
	fmt.Println()
	/*也可以以这种形式输出
	for j := range p {
		fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, *p[j], p[j])
	}
	*/
	/*
		结果:(可见每个元素的内存地址都不相同)
			索引:0, 值:1,内存地址:824633771136
			索引:1, 值:2,内存地址:824633771144
			索引:2, 值:3,内存地址:824633771152
			索引:3, 值:4,内存地址:824633771160
			索引:4, 值:5,内存地址:824633771168
	*/

	//-------------------------------------------------------------------------------
	//数组指针:*[n]int 表示一个指向数组的指针,里面的元素是int型
	var q *[5]int
	/*
		由后面可知每个元素的地址都一样,所以可以直接把这个数组的地址赋值给另一个数组,
		而不需要像指针数组每一个元素都要单独赋值
	*/
	q = &a1
	for j, k := range q {
		fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, (*q)[j], &k)
	}
	/*
		结果:(可见每个元素的内存地址是一样的)
			索引:0, 值:1,内存地址:824634425432
			索引:1, 值:2,内存地址:824634425432
			索引:2, 值:3,内存地址:824634425432
			索引:3, 值:4,内存地址:824634425432
			索引:4, 值:5,内存地址:824634425432
	*/
}

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