go语言 - 数组

本文主要复习Go语言中的数组,不涉及基础知识,直接通过代码实践巩固之前学习的内容,旨在加深对Go数组的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述:

今天开始,review 之前学过的go 的内容, 学而实习之,温故知新, 不为其他事项所耽误, 调整好自己下半年的时间安排;

go 中的关键字、基本类型、条件控制、循环 等最基础的内容就不重新整理, 从数组开始 往go 的高级内容进行复习,通过代码直接来熟悉前面的基础内容;


二、练习:

代码如下


package main

import (
	"fmt"
)

/*
	1. 数组是值类型,赋值和传参会赋值整个数组,而不是指针
	2. 数组长度必须是常量,且是类型的组成部分; [2]int 和 [3]int 是不同类型的数组
	3. 支持 == , != 操作符,因为内存总是被初始化过的
	4. 指针数组[n]*T , 数组指针 *[n]T
*/

func main() {

	//初始化
	arr1 := [3]int{1, 2}
	arr2 := [...]int{1, 2, 3, 4}
	arr3 := [5]int{2: 100, 4: 200}
	arr4 := [...]struct {
		name string
		age  uint8
	}{
		{"Ryan.Xu", 26},
		{"Huanchao.Xu", 18},
	}

	fmt.Println(arr1)
	fmt.Println(arr2)
	fmt.Println(arr3)
	fmt.Println(arr4)

	//遍历
	for i := 0; i < len(arr4); i++ {
		obj := arr4[i]
		fmt.Printf("name: %s, age: %d \n", obj.name, obj.age)
	}

	for i, obj := range arr4 {
		fmt.Printf("index: %d, name: %s, age: %d \n", i, obj.name, obj.age)
	}

	//多维数组
	twoDimensionArray := [2][3]int{
		{1, 2, 3},
		{4, 5, 6},
	}

	// 第 2 维度不能使用 ...
	twoDimensionArray2 := [...][2]int{
		{1, 1},
		{2, 2},
		{3, 3},
	}

	fmt.Println(twoDimensionArray)
	fmt.Println(twoDimensionArray2)

	for i := 0; i < len(twoDimensionArray); i++ {
		for j := 0; j < len(twoDimensionArray[i]); j++ {
			fmt.Printf("第 %d 行, 第 %d 列的 元素是:%d \n", i, j, twoDimensionArray[i][j])
		}
	}

	// 数组形参,值拷贝
	arr := [2]int{1, 3}
	fmt.Printf("数组arr 的地址为: %p \n", &arr)
	test(arr) //修改 arr[1] 为 10000
	fmt.Println("数组arr 的value 为:", arr)

}

//值拷贝行为会造成性能问题,建议使用slice or 数组指针
func test(arr [2]int) {
	fmt.Printf("传入的数组参数arr 的指针为: %p \n", &arr)
	arr[1] = 10000
	fmt.Printf("传入的数组参数arr 的value为: %p \n", &arr)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值