Go中的数组与C的数组一样,只是定义方法不同

c: int a[10][10]

Go [10][10]int

定义并初始化 array1 := [5]int{1,2,3,4,5}

变量名 := [index]类型{也可不加}

1.元素访问:1.跟C语言一样通过数组来访问

     2.通过关键字range来访问 如:for i,v :=range array{

                    fmt.Printlb(*Array element[",i,"]=*,v)

                   }第一个表示下标从0到len(array)-1

2.值类型:需要注意的是数组是一个值类型。所有的值类型变量在赋值和作为参数传递的时候都将进行一次复制,会将副本传递过去。所以函数体中无法通过修改传入的数组内容来改变数组。

3.函数切片:函数切片的数据结构可以抽象为以下三个变量

      {1.一个指向原生数组的指针;

       2.数组切片中的元素个数;

       3.数组切片已分配的存储空间。

}基于数组,数组切片添加了一系列管理功能,可以随时动态地扩充存放空间,并且可以被随意传递而不会导致所管理的元素被重复复制。

  创建数组切片:

    1.根据基础数组创建(有原数组):

      数组切片可以只使用数组的一部分元素或者整个数组来穿件,甚至可以创建一个比原数组还要大的数组切片。

      支持用mySlice := myArray[first:last]  这种方式来生成数组切片 //同C语言一样是从first到last-1位序列开始。myArray[ : ]表示全部。

     2.直接创造:

      使用Go语言提供的内置函数make()可以用来灵活地创建数组切片如:

        mySlice1 := make([ ]int,5)  //创建了一个有5个初始元素且初始值为0的数组切片

        mySlice2 := make([ ]int,5,10)//同上增加了留十个元素的存储空间

        mySlice3 := [ ]int{1,2,3,4,5}//直接创建并初始化元素的数组切片

      自我归纳:1.make函数可以初始切片并赋值为0和预留存储空间

           2.直接数组切片赋值不用添加make  如 Slice = [ ]类型{}

2.遍历数组和数组切片:

   1.跟C语言一样通过index访问

   2.使用range函数快速遍历:

      for i,v in range array{

        i为返回值的索引,v为返回元素的值//第一个返回索引,第二个返回元素值

3.动态增减元素:

  可动态增减元素是数组切片比数组更强大的功能。数组切片多了一个存储力(capacity)的概念=元素个数和分配的空间不同。可以大幅度降低数组切片内部重新分配内存和搬送内存快的频率,大大提高程序性能。因为如果内存大于了原设定的内存,需要CPU重新整一个更大的内存并把原来存储的东西移到新整的内存上面。且CPU并不知道更大为多大所以需要CPU处理多次。

  在此种有Go语言内置函数cap()和len()函数,cap()函数返回的是数组切片的预留空间大小,len()函数顾名思义返回的是已有元素个数。

  如果需要在数列切片中已包含的元素后继续新增元素,可以使用append()函数跟python的比较类似。如:

    mySlice = append(mySlice,1,2,3)  //append()函数的第二个参数其实是一个不定参数,可以自己随意添加若干个元素,甚至于将一个数组切片追加到另一个数组切片末尾:

        mySlice2 := [ ]int{1,2,3}

        mySlice = append(mySlice,mySlice2...)//但是后面需要有省略号,因为在append()函数中从第二个参数起所有的参数都是待附加参数。加上省略号相当于把mySlice2打碎了传入    mySlice = append(mySlice,1,2,3)

        数组切片会自动处理存储空间不足的问题。如果追加的内容长度超过当前已分配的存储空间(既大于cap()的返回值),数组切片会自动分配一个足够大的内存。

4.基于数组切片创建数组切片:

  如 oldSlice :=[ ]int{1,2,3,4,5}

    newSlice :=oldSlice[ : 3] //跟基于数组来创建数组切片[first:last]

   //newSlice可以创建oldSlice包含的元素,只要不超过oldSlice的cap()函数返回值,超过元素的部分初始化为0

5.内容复制:

  数组切片支持Go语言的内置函数copy(),用于将内容从一个数组切片复制到另一个数组切片。如果加入的数组切片不一样大,就会按其中较小的你数组切片的元素个数进行复制

  slice1 := []int{1, 2, 3, 4, 5}
  slice2 := []int{6, 7, 8}
  copy(slice1, slice2)//把slice2复制到slice1,但是由于slice2的数量小于slice1所以有多少复制多少

  copy(slice2,slice1)//把slice1复制到slice2,由于slice1数量大于slice2,则只复制前三到slice2

Go语言中的数组与数组切片的更多相关文章

  1. C语言中的函数、数组与指针

    1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函 ...

  2. C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  3. C语言中怎么求动态数组大小

    先来个简单的样例 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() keyword是求出 ...

  4. C语言中的二维数组

    1.二维数组的定义和引用 一. 数据类型 数组名[常量表达式1][常量表达式2]; (1)假如有个二维数组array[n][m],则行下标的取值范围0~n-1 (2)列下标的取值范围0~m-1 (3) ...

  5. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  6. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

  7. C语言中的指针和数组

    下面的内容节选自由我所执笔的会议记录.对于本文的不足之处,各位可以提出自己的看法. Q1:指针和数组到底是怎么一回事? A:指针和数组有本质的不同.指针就是一个内存地址,在32位系统下,一个指针永远占 ...

  8. C语言中的二维数组和数组指针的那些事

    其实很多人就想弄明白这个定义了的数组指针里面赋值给的a究竟是什么 a是一个列地址,那么*a是什么,*a还是个地址它存储了行地址.如果我们定义一个指针,那他就有点二级指针的味道.因为它存储的是一个地址, ...

  9. C语言中的数组的使用——混乱的内存管理

    在C语言中想要创建数组只能自己malloc或者calloc,数组复制则是memcpy. 这样创建出来的数组在调用时是不会检测数组边界的,即你声明了一个长度为5的数组,却可以访问第6个位置……也可以给第 ...

  10. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

随机推荐

  1. JAVA 爬虫框架webmagic 初步使用Demo

    一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...

  2. 谈谈一些有趣的CSS题目-- 单行居中,两行居左,超过两行省略

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  3. Codeforces Round #601 (Div. 2)D(蛇形模拟)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; vector<char>an ...

  4. 【C语言】(数组方式)输出一组成绩中的最高分与最低分

    两种不同方式获取最大值与最小值 代码1: #include <stdio.h> int main() { ], sum = , max, min; int i; printf(" ...

  5. lucky的时光助理-2017.02

    好久没有更新了, 即便没有听众, 有些故事还是要说给另一个自己听! lucky小姐在这个月开始重新找工作了, 她想找一份自己喜欢的工作, 然后安安稳稳的沉寂下来,她说:她要学些东西,才不会让自己看上去 ...

  6. Kosaraju's algorithm

    推荐到我的这篇博客中看完整版的. 该算法用于求解有向图的强连通分量,也就是强连通子图的个数. 算法实现摘自Kosaraju's algorithm - 百度百科: #include <iostr ...

  7. //C语言:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回。

    //函数fun:将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制数返回. #include <stdio.h> #pragma warning (disable:4996) ...

  8. 学习JavaScript数据结构与算法---前端进阶系列

    学习建议 1.视频学习---认知 建议:在中国慕课上找"数据结构"相关的视频教程.中国大学MOOC 推荐清华大学.北京大学.浙江大学的教程,可先试看,然后根据自身的情况选择视频进行 ...

  9. JSP页面中关于<c:if test="${...}"><c:if>标签的用法

    代码如下: <td class="showTd_HK" align="center"> <c:if test="${(rwyy01. ...

  10. 【转】uWSGI+django+nginx的工作原理流程与部署历程

    一.前言献给和我一样懵懂中不断汲取知识,进步的人们. 霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二.必要的前提 2.1 准备知识 1.django 一个基于python的开源web框架, ...