go语言 类型:数组

在go语言中数组array是一组特定长度的有序的元素集合。

go的数组类型由两部分组成——类型和长度,二者缺一不可。数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定其存储元素的类型以及存储多少个元素。

在Go语言中,数组长度在定义后就不可更改

数组是值类型,每次传递都将产生一份副本。

例子:

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var a [5]int           //定义数组 5个整数型
	fmt.Println("emp:", a) //整数型零值为0

	a[4] = 100 //修改数组
	fmt.Println("set:", a)
	fmt.Println("get:", a[4]) //输出单个值

	fmt.Println("len:", len(a)) //数组长度

	b := [5]int{45, 32, 12, 42, 55} //定义数组 定义数组的值
	fmt.Println("dcl:", b)

	for z, y := range b { //遍历数组
		fmt.Println("ran:", z, y)
	}

	var twoD [2][3]string    //二维数组
	for i := 0; i < 2; i++ { //循环
		for j := 0; j < 3; j++ {
			twoD[i][j] = strconv.Itoa(i) + "-" + strconv.Itoa(j) //修改数组
		}
	}
	fmt.Println("2d: ", twoD)
}

输出:

emp: [0 0 0 0 0]
set: [0 0 0 0 100]
get: 100
len: 5
dcl: [45 32 12 42 55]
ran: 0 45
ran: 1 32
ran: 2 12
ran: 3 42
ran: 4 55
2d:  [[0-0 0-1 0-2] [1-0 1-1 1-2]]

数组几种初始化方式:

var a [10]int

var a = [10]int{0,1,2,3,4,5,6,7,8,9}
var a = [...]int{0,1,2,3,4,5,6,7,8,9}

var a = [2][2]int{[2]int{1,1}, [2]int{2,2}}
var a = [2][2]int{{1,1}, {2,2}}

  

时间: 2024-08-27 16:11:54

go语言 类型:数组的相关文章

go语言 类型:数组切片

初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切片已分配的存储空间. slice不是一个值类型,而是一个引用类型,就好比指针一样,对slice取得的元素进行写操作实际是影响到了底层的数组层,slice真的只是一层薄薄的操作封装罢了.因此,slice有一个重要的用途就是作为函数的参数,就这可以避免直接传递数组而导致整个数组发生一次内存拷贝.

C语言实现一个int类型数组里除了两个数字之外,其他的数字都出现了两次,找出这两个数字

题目是这样叙述的:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字. 要求:时间复杂度为O(N),空间复杂度为O(1). 请看我的分析:将这道题简单化:一个数组中只有一个数字出现一次,其他数字都是成对出现的,这时我们可以根据异或运算符的特性:A^B^A = B; 0 ^ A = A:我们可以将这个数组的全部元素依次做异或运算,最终结果就是那个只出现一次的数字.不会的可看本人(2019-04-04)那天的博客 如果这个数组中出现两个不同的数字,而其他数字均出现两次

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

C语言之数组名的含义

一:一维数组 int a[5]; a:就是数组名.a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值:a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最开始第一个字节的地址).a做右值等同于&a[0]; a[0]:表示数组的首元素,也就是数组的第0个元素.做左值时表示数组第0个元素对应的内存空间(连续4字节):做右值时表示数组第0个元素的值(也就是数组第0个元素

【Go语言】【6】GO语言的数组

在<[4]GO语言类型和为类型增加方法>里说过GO语言除了基础类型(如int.float64.complex128等)之外,还有复合类型,其中就包含本文的数组.对于数组大家都不陌生,在C语言中可以这样声明一个一维数组:int arr[10],那么GO语言是怎么定义的呢? 一.数组的声明 1.数组的声明格式为var arrName [num]type,比如: var strArr [10]string     // 声明一个由10个字符串组成的一维字符串数组 var byteArr [32]by

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

C语言 对数组名取地址

作者 : 卿笃军 你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算.这会出现什么样的结果呢? 示例: int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); printf("%d\n",*(p-1)); 这个输出会是多少呢? 咦?为什么第二行需要强制转化类型呢? 答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针.怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]. 行指针+1,就是

C语言一维数组初步学习笔记

数组 可以存储一组或者多组数值的变量,里面包含多个元素,数组的每个成员都是一个数组元素. 一维数组 定义:类型 数组名[常量表达式] = {值1, 值2, 值3…}; ? 1 2 3 4 int a[3] = {0, 1, 2}; float f[2] = {1.2, 2.3, 3.14}; char str[] = {'h', 'e', 'l', 'l', 'o'}; chat str1 = "iPhone";//这也是定义字符数组的方法,字符数组后面会详细讲解,这里先了解一下 当数

学习C语言的数组

C语言的数组 数组声明的实例:int num[3];只要记下这个模板就好. 不建议使用变量定义数组,如果使用了变量定义数组,作为数组的元素的个数,不初始化的情况下是随机值,如果初始化会直接报错 注意:如果定义的同时进行初始化,那么元素的个数可以省略省略之后,初始化赋值几个数据,那么数组的长度就是几,也就是说数组将来就能存储几个数据.int scores[] = {1,3};//只有两个存储空间了如果没有进行初始化,就不能省略元素个数:    错误的:int scores[]; 可以通过[]索引指