go语言教程3:数组、切片和指针

文章目录

    • 高维数组
    • 切片
    • 指针

go语言教程:安装入门➡️for循环

高维数组

前面已经讲到过基本的数组声明方式

var a [3]int	// a是长度为3的数组,内容为0
var b = [3]int{1, 2, 3}
c := [3]int{1,2,3}

由于数组只需要内部元素有着相同类型,所以自然地衍生出一个问题:数组是否可以作为另一个数组的元素?此即二维数组。下面列举几个二维数组初始化的案例

a := [3][2]int{  {0, 1},{2, 3},{4, 5}, 
}b := [3][2]int{  {0, 1},{2, 3},{4, 5}}c := [3][2]int{{0, 1},  {2, 3},  {4, 5}}

b和a完全相同,只是最后一行少了个逗号,所以必须把最后一个花括号挪上去。

下面做一个测试

// arr.go
package main
import "fmt"func arrTest1(){c := [3][2]int{{0, 1},  {2, 3},  {4, 5}}for i,r := range c{for j,x := range r{fmt.Println("c[",i,"][",j,"]=",x)}}
}func main(){arrTest1()
}

结果如下

>go run arr.go
c[ 0 ][ 0 ]= 0
c[ 0 ][ 1 ]= 1
c[ 1 ][ 0 ]= 2
c[ 1 ][ 1 ]= 3
c[ 2 ][ 0 ]= 4
c[ 2 ][ 1 ]= 5

理论上数组的维度是可以不断递增的,比如下面的代码可以初始化一段 2 × 3 × 4 2\times3\times4 2×3×4的数组

var triArr1 [2][3][4] int
triArr2 := [2][3][4] int

切片

在go语言中,数组元素是固定的,因此实际使用时会受到许多限制。相比之下,切片更加强大而易用。

就写法来说,只要声明一个未定义长度的数组,即表示新建并初始化了一个切片。据说在生成并初始化一个切片的同时,也会默认生成一个长度固定的数组。而且这个数组还会影响切片的长度。通过关键字make可以声明一个定义了最大长度的切片。

func slTest()  {sl1 := []int{1,2,3,4,5}fmt.Println("sl1=",sl1)fmt.Println("sl1[1:4]=",sl1[1:4])	//slice索引fmt.Println("sl1[1:4]=",sl1[:4])	//左端默认为0,右端默认为切片长度var sl2 = make([]int,3,5)fmt.Printf("len=%d cap=%d slice=%v\n", len(sl2),cap(sl2),sl2)
}

其中,len()返回切片长度;cap()返回切片的最大长度,运行结果如下

>go run arr.go
sl1= [1 2 3 4 5]
sl1[1:4]= [2 3 4]
sl1[1:4]= [1 2 3 4]
len=3 cap=5 slice=[0 0 0]

指针

支持数组这个并不稀奇,但凡有一点野心的编程语言,都会支持数组。但指针就太让人意外了,这种几乎只在C语言中出现的古老工具,竟然出现再了如此年轻的go语言身上,可能ken就好这口吧。

和C语言类似,定义指针需用到*,指向某个内存地址,其取地址符为&,示例如下

func ptrTest(){var arr [5]int			//声明一个长度为5的数组for i := 0; i<5; i++{arr[i] = i*ifmt.Printf("第 %d 位赋值为 %d \n",i,arr[i])}var ip *intvar fp *float64ip = &arr[0]	//将ip指向arr[0]的地址fmt.Printf("fp的值为:%x\n",fp)	//由于fp未赋值,所以为空指针fmt.Printf("ip的值为:%x\n",ip)
}

其中,ip是一个整型指针,fp是一个浮点型指针,

运行结果如下

>go run arr.go0 位赋值为 01 位赋值为 12 位赋值为 43 位赋值为 94 位赋值为 16
fp的值为:0
ip的值为:c000012480

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

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

相关文章

Typescript 笔记:循环

1 for循环 和c很类似 for ( init; condition; increment ){statement(s); }举例&#xff1a; var num:number 5; var i:number; var factorial 1; for(i num;i>1;i--) {factorial * i; } console.log(factorial) 2 for... in 循环 用于一组值的集合或列表进行迭代…

第五节 C++ 循环结构(算法)

文章目录 前言介绍1. for 语句1.1 语法结构1.2 语法流程的执行过程1.2.1 案例 1:循环的正序输入和倒序输入1.2.2 案例2 : 求1~n的平方数1.2.3 案例 3: 求输入a和b,求a~b区间数. 1.3 for 循环案例练习1.3.1 求最大值与最小值1.3.2 计算奇数和和偶数和1.3.3 计算平均气温与最高气…

Stable diffusion 用DeOldify给黑白照片、视频上色

老照片常常因为当时的技术限制而只有黑白版本。然而现代的 AI 技术,如 DeOldify,可以让这些照片重现色彩。 本教程将详细介绍如何使用 DeOldify 来给老照片上色。. 之前介绍过基于虚拟环境的 基于DeOldify的给黑白照片、视频上色,本次介绍对于新手比较友好的在Stable diff…

无声的世界,精神科用药并结合临床的一些分析及笔记(七)

目录 能否一劳永逸&#xff1f; 除了药物还有哪些治疗手段&#xff1f; 经颅磁刺激治疗 心理疏导 团体治疗 MECT&#xff0c;终极物理疗法 误区 哪些人适用&#xff1f; 流程 费用 副作用 小结 能否一劳永逸&#xff1f; 对于抑郁症&#xff0c;当你非常迷茫、无措…

在SQL语句里使用正则表达式,因该怎么使用

在SQL中使用正则表达式通常需要使用特定的函数或运算符&#xff0c;具体的语法可能因不同的数据库系统而有所不同。以下是使用正则表达式的一般方法&#xff0c;但请注意&#xff0c;具体语法可能会因您使用的数据库而有所不同。 一般情况下&#xff0c;您可以使用以下方法在S…

04-RocketMQ源码解读

目录汇总&#xff1a;RocketMQ从入门到精通汇总 上一篇&#xff1a;03-RocketMQ高级原理 这一部分&#xff0c;我们开始深入RocketMQ的源码。源码的解读是个非常困难的过程&#xff0c;每个人的理解程度都会不一样&#xff0c;也不太可能通过讲解把其中的细节全部讲明白。我们今…

第五十四章 学习常用技能 - 生成测试数据

文章目录 第五十四章 学习常用技能 - 生成测试数据生成测试数据Extending %Populate使用 %Populate 和 %PopulateUtils 方法 第五十四章 学习常用技能 - 生成测试数据 生成测试数据 IRIS 包含一个用于为持久类创建伪随机测试数据的实用程序。此类数据的创建称为数据填充&…

13私有化属性的一些注意点

目录 一、解释一下几个私有化访问的方式&#xff01;&#xff01;&#xff01; 1.类内部访问&#xff1a; 2.子类访问 3.模块内其他位置访问 4.跨模块访问 二、_y受保护属性的访问 只有跨模块这块需要注意一下&#xff01; 这个是可以访问的 但是下面这个是不可以的 …

Python皮卡丘

系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://want…

信息化工程测试验收管理制度

1、总则 1.1、目的 为规范XXXXX单位的信息系统建设和工程项目测试验收准则&#xff0c;特制订本管理制度。 1.2、范围 本制度适用于XXXXX单位工程测试验收管理。 1.3、职责 信息系统建设和其他信息系统工程类项目的测试和验收主要由项目负责人负责&#xff0c;必要的时候…

Ai图像绘制模型训练以及应用

Ai图像绘制模型训练以及应用 前言 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;作为当前IT领域最受关注的热门话题之一&#xff0c;已经应用于各个领域&#xff0c;包括医疗保健、金融、交通和制造业等。其中&#xff0c;图像识别和处理是人工智能…

【数据结构与算法】三种简单排序算法,包括冒泡排序、选择排序、插入排序算法

冒泡排序算法 冒泡排序他是通过双重循环对每一个值进行比较&#xff0c;将小的值向后移动&#xff0c;以达到最终排序的结果&#xff0c;他的时间复杂度为O(n^2)。 /*** 冒泡排序* param arr*/public static void bubbleSort(int[] arr){int l arr.length;for (int i 0; i <…

Element UI怎么安装呢?

安装 :::warning 注意 后续演示将会在 Vue CLI 搭建的 Vue 项目上进行操作。如需要请查看 Vue CLI 安装 ::: 通过 YARN 命令安装 $ yarn add element-ui完整引入 代表一次性引入所有组件&#xff0c;比较省心省事&#xff0c;但是项目的打包体积也会跟着变大。 // main.js…

3.简单场景构建

在新建的项目中&#xff0c;默认存在 Main Camera 和 Directional Light两个对象。若是缺失&#xff0c;可通过选择菜单中的 Game Object->Camera 和 Geme Object->Light->Directional Light进行创建。 1.添加地形及底图 通过在Cesium面板中选择 Cesium World Terrai…

[Spring] Springmvc执行流程

介绍 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;使用了MVC的架构模式思想&#xff0c;将Web层进行指责解耦&#xff0c;并管理应用所需的生命周期&#xff0c;为简化日常开发&#xff0c;提供了很大便利。 组件 组件Dispatche…

VAE模型(详细推导+实例代码)

文章目录 EM算法思路E步M步直观感觉 GMM模型VAEVAE思想从GMM到VAE公式推导重参数VAE神经网络另一个视角的VAE思想为什么引入encoder为什么要重参数噪声与重建 Discrete VAE 本文会从EM算法&#xff0c;GMM模型一步一步的的推导&#xff0c;在过渡到VAE模型&#xff0c;如果有熟…

Excel·VBA使用ADO合并工作簿

之前文章《ExcelVBA合并工作簿&#xff08;7&#xff0c;合并子文件夹同名工作簿中同名工作表&#xff0c;纵向汇总数据&#xff09;》处理合并工作簿问题&#xff0c;代码运行速度比较慢 而《ExcelVBA使用ADO读取工作簿工作表数据》读取数据非常快&#xff0c;那么是否可以使用…

车辆调度算法

参考资料 有什么车辆调度算法的最新研究&#xff0c;比如用强化学习的方法&#xff1f; https://www.zhihu.com/question/312332312 策略算法工程师之路-图优化算法(一)(二分图&最小费用最大流) https://zhuanlan.zhihu.com/p/103825713 模拟退火&#xff08;SA&#xf…

1200*C1. k-LCM (easy version)(找规律)

Problem - 1497C1 - Codeforces 解析&#xff1a; 找规律即可&#xff0c;分为偶数的一半是偶数、偶数的一半是奇数、奇数三种情况 分别为 &#xff08;n/2&#xff0c;n/4&#xff0c;n/4&#xff09;&#xff08;n/2-1&#xff0c;n/2-1&#xff0c;2&#xff09;&#xff08…

多线程并发篇---第六篇

系列文章目录 文章目录 系列文章目录一、说一说自己对于 synchronized 关键字的了解二、说说自己是怎么使用 synchronized 关键字?三、什么是线程安全?Vector是一个线程安全类吗?一、说一说自己对于 synchronized 关键字的了解 synchronized关键字解决的是多个线程之间访问…