Go——数组

news2024/11/17 4:43:29

        Golang Array和以往认知的数组有很大的。

  • 数组是同一种数据类型的固定长度的序列。
  • 数组定义:var a[len] int,比如:var a [5]int,数组长度必须是常量,且类型的组成部分。一旦定义,长度不能变。
  • 长度是数组类型的一部分,因此,var a[5] int和var a[10] int是不同的类型。
  • 数组可以通过下标进行访问,下标从0开始,最后一个元素下标是:len-1。
for i := 0; i < len(a); i++ {
    
}

for index, v := range a {

}
  • 访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic。
  • 数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
  • 至此"==","!="操作符,因为内存总是被初始化过的。
  • 指针数组 [n] *T,数组指针 *[n]T。

        1.数组初始化

  • 一维数组
package main

import (
	"fmt"
)

// 全局变量
var arr0 [5]int = [5]int{1, 2, 3} //未初始化元素值为0
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}           //通过初始化值来确定数组长度
var str = [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素

func main() {
    //局部变量
	a := [3]int{1, 2}                          //未初始化元素值为0
	b := [...]int{1, 2, 3, 4, 5}               //通过初始化值来确定数组长度
	c := [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素
	d := [...]struct {
		name string
		age  uint8
	}{
		{"user1", 10}, //可以省略元素类型
		{"user2", 20}, //不要忘记最后的逗号
	}

	fmt.Println(arr0, arr1, arr2, str)
	fmt.Println(a, b, c, d)
}

  • 多维数组 
package main

import "fmt"

//全局变量
var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {4, 5, 6}}

func main() {
	//局部变量
	a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
	b := [...][2]int{{1, 2}, {3, 4}, {5, 6}} //第二维度不能为...
	fmt.Println(arr0, arr1)
	fmt.Println(a, b)
}

2. 数组值拷贝

        数组是值类型,赋值和传参会复制整个数组,而不是指针。

        值拷贝行为会造成性能问题,通常会建议使用slice,或数组指针。

package main

import "fmt"

func test(a [2]int) {
	fmt.Printf("test-a:%p\n", &a)
	a[0] = 100
	a[1] = 100
}

func main() {
	var a [2]int
	fmt.Printf("main-a:%p\n", &a)
	test(a)
	fmt.Println(a)
}

        因为值拷贝,地址不同,数据有没有修改。 

3. 内置函数

        内置函数len和cap都返回数组长度(元素数量)

package main

import "fmt"

func main() {
	var arr [2]int = [2]int{1, 2}
	fmt.Println(len(arr), cap(arr))

	arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素
	fmt.Println(len(arr2), cap(arr2))
}

注意:string底层是byte数组([]byte),len一个string类型的遍历,得到的是byte数组的长度。 

        4. 多维数组遍历 

package main

import "fmt"

func main() {
	arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素
	//使用内置函数len
	for i := 0; i < len(arr2); i++ {
		for j := 0; j < len(arr2[i]); j++ {
			fmt.Printf("arr2[%d][%d] = %d ", i, j, arr2[i][j])
		}
	}
	fmt.Println()
	//使用range
	for index1, v1 := range arr2 {
		for index2, v2 := range v1 {
			fmt.Printf("arr2[%d][%d] = %d ", index1, index2, v2)
		}
	}
}

 5. 数组拷贝和传参

        使用指针传参。

6. 数组练习

  • 求数组所有元素之和

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func sumArr(a [10]int) int {
	sum := 0
	for i, v := range a {
		fmt.Printf("arr[%d]=%d ", i, v)
		sum += v
	}
	fmt.Println()
	return sum
}

func main() {
	//随机数种子
	rand.Seed(time.Now().Unix())

	var b [10]int
	for i := 0; i < len(b); i++ {
		b[i] = rand.Intn(1000) //产生一个0到1000的随机数
	}

	sum := sumArr(b)
	fmt.Println(sum)
}
  • 找到数组中和为给定值的两元素下标
package main

import "fmt"

func myTest(arr [6]int, val int) {
	for i := 0; i < len(arr); i++ {
		for j := len(arr) - 1; j > i; j-- {
			if arr[i]+arr[j] == val {
				fmt.Printf("(%d, %d)", i, j)
			}
		}
	}
}

func main() {
	arr := [...]int{1, 2, 3, 4, 5, 6}
	myTest(arr, 8)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32串口通信—串口的接收和发送详解

目录 前言&#xff1a; STM32串口通信基础知识&#xff1a; 1&#xff0c;STM32里的串口通信 2&#xff0c;串口的发送和接收 串口发送&#xff1a; 串口接收&#xff1a; 串口在STM32中的配置&#xff1a; 1. RCC开启USART、串口TX/RX所对应的GPIO口 2. 初始化GPIO口 …

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉操作系统内存异常实例讲解

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉内存溢出实例讲解 一、事故描述 生产环境Java进程莫名挡掉&#xff0c;JVM宕机。监控平台报警。生产停了&#xff0c;老板急了&#xff0c;客户爆了&#xff0c;怎么迅速解决事故&#xff1f;每次出现生产事故&#xff0c;都是…

【JVM】什么是运行时数据区?

什么是运行时数据区&#xff1f; 运行时数据区指的是JVM所管理的内存区域&#xff0c;其中分成两大类&#xff1a; 线程共享 – 方法区、堆 方法区&#xff1a;存放每一个加载的类的元信息、运行时常量池、字符串常量池。 堆&#xff1a;存放创建出来的对象。 线程不共享 – …

VB+ACCESS学籍管理系统-264-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword264 设计要求&#xff1a; 第一&#xff1a;一篇论文&#xff08;5000到10000字&#xff09;不包括图表和程序代码。A4纸20页之内。 论文结构如下&#xff1a; 设计题目&#xff1a;学籍管理系统 附&#xff1a;程…

Jeff Bezos的投资正开始见效

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

计算机组成原理练习-计算机硬件组成

冯诺依曼结构计算机 1.冯诺依曼结构计算机中数据采用二进制编码表示&#xff0c;其主要原因是&#xff08;&#xff09;。 I.二进制的运算规则简单 Ⅱ.制造两个稳态的物理器件较容易 Ⅲ.便于用逻辑门电路实现算术运算 A.仅I、Ⅱ B.仅I…

Spring具体拓展点:后置处理器

一图胜千言 mermaid示例图&#xff1a; #mermaid-svg-YEqFb5JcEk5FWkwO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YEqFb5JcEk5FWkwO .error-icon{fill:#552222;}#mermaid-svg-YEqFb5JcEk5FWkwO .error-text{fi…

如何注册Devin-首个全自主AI软件工程师

最近devin大火&#xff0c;具体的就不说了&#xff0c;大家应该都知道&#xff0c;写代码非常nb&#xff0c;这里说一下devin的注册方式&#xff0c;目前devin的内测已经开启。 官网https://www.cognition-labs.com/blog注册网址Your reliable AI software engineerhttps://pr…

腾讯云服务器地域选择方法,神仙教程,看这一篇就够了

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

Windows C++ 使用WinAPI实现RPC

demo下载地址&#xff1a;https://download.csdn.net/download/2403_83063732/88958730 1、创建IDL文件以及acf文件&#xff08;创建helloworld.idl helloworld.acf&#xff09; 其中IDL文件&#xff1a; import "oaidl.idl"; import "ocidl.idl"; [ …

C++_day3:构造函数、析构函数、拷贝构造函数

1.设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 程序代码&#xff1a; #include <iostream>…

L2-034: 口罩发放(Python)

为了抗击来势汹汹的 COVID19 新型冠状病毒&#xff0c;全国各地均启动了各项措施控制疫情发展&#xff0c;其中一个重要的环节是口罩的发放。 某市出于给市民发放口罩的需要&#xff0c;推出了一款小程序让市民填写信息&#xff0c;方便工作的开展。小程序收集了各种信息&…

Github 2024-03-14 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目9非开发语言项目1TypeScript项目1Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42…

基于java+springboot+mybatis+laiyu实现学科竞赛管理系统

基于javaspringbootmybatislaiyu实现学科竞赛管理系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获…

Hackthebox - Scrambled- linux

Recon Port Scan HTTP 80 根据在 support 页面得到的信息&#xff1a; 邮箱 supportscramblecorp.com用户名 ksimpson一个用于连接 4411 端口的软件密码 ksimpson SMB 445 这里连接 SMB 服务是连不上的&#xff0c;因为禁用了 NTLM MSSQL 1443 SQL 服务也同样 Unkn…

下载指定版本的pytorch

下载网址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 参考博客网址&#xff1a;https://blog.csdn.net/wusuoweiieq/article/details/132773977

【代码随想录 | 链表 04】删除链表的倒数第N个节点

文章目录 4.删除链表的倒数的第N个节点4.1题目4.2解法&#xff1a;双指针 4.删除链表的倒数的第N个节点 19.删除链表的倒数第N个节点 4.1题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例一&#xff1a; 输入&#xff1a;h…

github拉取项目找不到前端代码

今天从github上拉取了一个项目&#xff0c;使用docker部署在了服务器上&#xff0c; 代码正常运行&#xff0c;但是想在下载的项目中找前端代码遇到了问题&#xff0c;项目结构中的template模板只有一个页面&#xff0c;于是查看nginx配置文件 查看index.html 引入了一些js文件…

24GB内存就能跑7B参数大模型?全新训练策略GaLore助你突破内存瓶颈

训练大型语言模型&#xff0c;内存总是个大问题。 权重啊、优化器状态啊&#xff0c;都得吃内存&#xff0c;而且吃得还不少。 为了省内存&#xff0c;有人就想出了一些招儿&#xff0c;比如低秩适应&#xff08;LoRA&#xff09;&#xff0c;就是给预训练权重添点儿可训练的…

EasyRecovery恢复电脑丢失数据怎么样?

电脑是我们大家熟悉并且常用的数据存储设备&#xff0c;也是综合性非常强的数据处理设备。对于电脑设备来讲&#xff0c;最主要的数据存储介质是硬盘&#xff0c;电脑硬盘被划分成多个分区&#xff0c;在电脑上表现为C盘&#xff0c;E盘等&#xff0c;用来保存系统文件以及其他…