go 语言学习 - 数组和切片

package main

import "fmt"

func main(){

	//数组
	var a = [3]int{}//相当于[3]int{0,0,0}
	a[0] = 1
	changeArray(a)
	fmt.Println(a)

	b := [...]int{1,2,3}//省略号符号表示让编译器根据后面初始化情况自动计算数组的长度,但这个长度是编译时确定的
	fmt.Println(b)

	c := new([3]int)  //new 返回的是地址,但是一样可以用 pointName[index] 访问,但是输出时需要取地址对应的值
	c[1] = 17  //这里和 (*c)[1] 等效 , 但不象 c 一样支持指针运算,除非使用 unsafe 模块
	fmt.Println(*c)

    /////////////////////////////////////////////////////////////

	//切片
	d := []int{0,0,0} //跟数组类似,但不指定长度
	d[0] = 1
	fmt.Println(d)

	e := make([]int,5,10) //make 只能创建 slice,map,chanel,且返回引用,new 可以创建任何类型,返回地址
	e[1] = 12
	fmt.Println(e)
	changeSlice(e)
	fmt.Println(e)

	f := *new([]int) // new 可以创建任何类型并返回地址,但不能用参数指定大小,这个方法非常不常用
	f = append(f,1,2,3)
	fmt.Println(f)

	g := c[:]  //基于数组创建切片,这个方法非常简单实用[:] 表示所有元素还可以用 [m:] [:n] [m:n]
	//对数组的一次切片操作后即返回切片
	fmt.Println(g)
}

// 数组是传值引用,因此函数对数组的修改不影响原值 而且[3]int 和 [4]int 是不同的类型
// 如果必须要改变数组的值,需求明确指定传递数组的指针
// 例如这里用 changeArray(x *[3]int) , 调用时用 changeArray(&a)
func changeArray(x [3]int){
	x[1] = 100
}

//切片传的是引用,因此函数对切片的修改影响原值
func changeSlice(x []int){
	x[1] = 100
}

原文地址:https://www.cnblogs.com/scala/p/9537649.html

时间: 2024-11-09 12:41:45

go 语言学习 - 数组和切片的相关文章

go语言的数组与切片

go语言的数组与切片 如果有编程基础的话,提到数组我们肯定不会陌生,所谓数组,就是有数的元素序列,我们可以认为数组是有限的相同类型数据的集合. 数组长度是固定的,所以这会带来很多局限性. 比如说只接受相同类型的元素,长度固定等等. 那么切片的出现,则为golang解决了以上数组所带来的不便. 切片(slice)是一个引用类型,它是拥有相同类型的元素并且长度可变的序列. 基于数组类型做的一层封装,支持扩容. 切片的内部结构包含地址.长度.容量.它主要用于服务一块数据的集合. 下面我们来看一看数组的

Go语言入门——数组、切片和映射

按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始” 但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了. 1.简介 Go是什么? Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.——摘自百度百科 Github地址 https://github.com/golang/go 官网地址 https://golang.org 中文网社区 https://

R语言学习——数组

1.数组:数组是超过2维的相同元素的集合. 矩阵就是二维的数组. 2.数组的创建 array函数来创建数组. 3.元素的引用: 下标索引. 名字索引. 同维度逻辑对象筛选. 原文地址:https://www.cnblogs.com/caiyishuai/p/9726443.html

GO语言总结(3)——数组和切片

上篇博文简单介绍了一下Go语言的基本类型——GO语言总结(2)——基本类型,本篇博文开始介绍Go语言的数组和切片. 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, ... , valueN}.[...]Type{value1, value2, ... , valueN} 如下: func test5() { var iarray1 [5]int32

go语言数组与切片比较

一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, ... , valueN}.[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() {    var iarray1 [5]int32    var iarray2 [5]int32 = [5]int32{1, 2, 3,

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

【C语言学习】指针再学习(二)之数组的指针

★一维数组 一个整型数据为4个字节.4个字节就是32位,即可以表示2^32个数字 在程序中定义一个数组a[5] = {1,2,3,4,5}; 那么a[0]的地址就是0x00000000,数组名a是数组首元素的地址,a的地址也是0x00000000.a+1则表示的地址是0x00000004,而不是0x00000001.因为1这个值,根据前面的指针a所指向的类型的长度来调整自己的长度.也就是说如果a是指向整型的指针,那么后面加的1也表示4个字节,如果a是指向字符型的指针,那么后面加的1表示1个字节.

C语言学习_数组与指针2

数组其实是一种变相的指针,数组名同时也是指针,eg: CODE == &CODE[0]; 数组的加法: #include<stdio.h> #define SIZE 4 int main(void) { shortdates[SIZE]; short* pti; shortindex; doublebills[SIZE]; double* ptf; pti= dates;//把数组地址付给指针 ptf= bills; printf("%23s  %10s\n", &

C语言学习笔记(五) 数组

数组 数组的出现就是为了解决大量同类型数据的存储和使用的问题: 数组的分类:一维数组.二维数组. 一维数组:为多个变量连续分配存储控件:所有的变量的数据类型必须相同:所有变量所占的字节大小必须相等: 例如:int a[4]; 一维数组名不代表数组中的所有元素而是代表数组中第一个元素的地址: 数组的初始化: 完全初始化: int a[4] = {1,2,3,4}; 不完全初始化: int a[4] = {1};  未被初始化的元素的值默认为0; 数组清零 int a[4] = {0}; 不初始化: