go语言数组
数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组是值类型定义数组:1。var数组变量名〔元素数量〕Type2。vara〔5〕int定义五个整数的数组
fmt。Println(a〔0〕)打印第一个元素
fmt。Println(a〔len(a)1〕)打印最后一个元素
数组的每个元素都可以通过索引下标来访问,索引下标的范围是从0开始到数组长度减1的位置,内置函数len()可以返回数组中元素的个数。packagemainimportfmtfuncmain(){intarraty:〔5〕int{1,2,3,4,5}fmt。Println(intarraty)fmt。Println(intarraty〔1〕)fmt。Println(intarraty〔2〕)varintArrray2〔5〕intintArrray2〔5〕int{6,7,8,9,10}fmt。Println(intArrray2)fori:0;ilen(intArrray2);i{fmt。Println(intArrray2〔i〕)}}输出结果〔12345〕23〔678910〕678910程序2元素的个数不能是变量packagemainimportfmtfuncmain(){n:5intarraty:〔n〕int{1,2,3,4,5}fmt。Println(intarraty)fmt。Println(intarraty〔1〕)fmt。Println(intarraty〔2〕)}输出结果abcgorunmain。gocommandlinearguments。main。go:7:13:nonconstantarrayboundn测试程序3packagemainimportfmtfuncmain(){constn5intarraty:〔n〕int{1,2,3,4,5}fmt。Println(intarraty)fmt。Println(intarraty〔1〕)fmt。Println(intarraty〔2〕)}输出结果abcgorunmain。go〔12345〕23
2。类型的打印,结果的第二种打印方式packagemainimportfmtfuncmain(){varintArrray2〔5〕intintArrray2〔5〕int{6,7,8,9,10}fori,v:rangeintArrray2{fmt。Printf(第d个数据是v,i1,v)}打印类型fmt。Printf(intArrray2的类型:T,intArrray2)fmt。Printf(intArrray2〔1〕的类型:T,intArrray2〔1〕)}输出结果abcgorunmain。go第1个数据是6第2个数据是7第3个数据是8第4个数据是9第5个数据是10intArrray2的类型:〔5〕intintArrray2〔1〕的类型:int
3。对元素的修改或者赋值packagemainimportfmtfuncmain(){varintArrray2〔5〕intintArrray2〔5〕int{6,7,8,9,10}fori,v:rangeintArrray2{fmt。Printf(第d个数据是v,i1,v)}intArrray2〔0〕123对元素的修改或者赋值fmt。Println(intArrray2)}输出结果abcgorunmain。go第1个数据是6第2个数据是7第3个数据是8第4个数据是9第5个数据是10〔12378910〕
4。判断数组是否相等:长度、类型packagemainimportfmtfuncmain(){array1:〔5〕int{1,2,3,4,5}array2:〔5〕int{1,2,3,4,5}array3:〔5〕int{6,7,3,4,5}fmt。Println(array1array2)fmt。Println(array1array3)}输出结果abcgorunmain。gotruefalsepackagemainimportfmtfuncmain(){array1:〔5〕int{1,2,3,4,5}array2:〔5〕int{1,2,3,4,5}array3:〔5〕int{6,7,3,4,5}array4:〔4〕int{1,2,3,4}array5:〔5〕float32{1,2,3,4,5}fmt。Println(array1array2)fmt。Println(array1array3)fmt。Println(array1array4)fmt。Println(array1array5)}输出结果abcgorunmain。gocommandlinearguments。main。go:14:20:invalidoperation:array1array4(mismatchedtypes〔5〕intand〔4〕int)。main。go:15:20:invalidoperation:array1array5(mismatchedtypes〔5〕intand〔5〕float32)gongpengdeiMac:erchashuabc
4。数组的地址:连续存储的空间packagemainimportfmtfuncmain(){array1:〔5〕int{1,2,3,4,5}fmt。Printf(数组的首地址是:p,array1)fori:0;ilen(array1);i{fmt。Printf(第d个数据的地址是:p,i1,array1〔i〕)}}输出结果abcgorunmain。go数组的首地址是:0xc0000181b0一个int占4个字节第1个数据的地址是:0xc0000181b0第2个数据的地址是:0xc0000181b8第3个数据的地址是:0xc0000181c0第4个数据的地址是:0xc0000181c8第5个数据的地址是:0xc0000181d0packagemainimportfmtfuncmain(){a:〔5〕byte{1,2,3,4,5}fmt。Println(a)fori:0;ilen(a);i{fmt。Printf(a的地址:p,a〔i〕)}}输出结果abcgorunmain。go〔12345〕a的地址:0xc00001608aa的地址:0xc00001608ba的地址:0xc00001608ca的地址:0xc00001608da的地址:0xc00001608e
5。数组的赋值、地址、取值packagemainimportfmtfuncmain(){constn10vararray1〔n〕intarray1〔1〕1fmt。Println(array1)}输出结果abcgorunmain。go〔0100000000〕packagemainimportfmtfuncmain(){批量赋值的实现constn10vararray1〔n〕intfori:0;ilen(array1);i{array1〔i〕2i}fmt。Println(array1)}输出结果abcgorunmain。go〔024681012141618〕packagemainimportfmtfuncmain(){批量赋值的实现constn10vararray1〔n〕intfori:0;ilen(array1);i{array1〔i〕2ifmt。Println(array1〔i〕,(array1〔i〕))}}输出结果abcgorunmain。go0xc0000b800000xc0000b800820xc0000b801040xc0000b801860xc0000b802080xc0000b8028100xc0000b8030120xc0000b8038140xc0000b8040160xc0000b804818
6。数组的默认值packagemainimportfmtfuncmain(){constn10vararray1〔n〕intfmt。Println(int的默认值:,array1)vararray2〔n〕boolfmt。Println(bool的默认值:,array2)vararray3〔n〕float32fmt。Println(float32的默认值:,array3)vararray4〔n〕stringfmt。Println(string的默认值:,array4)}输出结果abcgorunmain。goint的默认值:〔0000000000〕bool的默认值:〔falsefalsefalsefalsefalsefalsefalsefalsefalsefalse〕float32的默认值:〔0000000000〕string的默认值:〔〕
7。数组的初始化packagemainimportfmtfuncmain(){vara1〔3〕int〔3〕int{1,2,3}vara2〔3〕int{1,2,3}a3:〔3〕int{1,2,3}vara4〔。。。〕int{1,2,3}a5:〔。。。〕int{1,2,3}a6:〔。。。〕int{2:1,1:2,0:3}vara7〔。。。〕int{2:1,1:2,0:3}fmt。Println(a1:,a1)fmt。Println(a2:,a2)fmt。Println(a3:,a3)fmt。Println(a4:,a4)fmt。Println(a5:,a5)fmt。Println(a6:,a6)fmt。Println(a7:,a7)strs1:〔。。。〕string{1:A,0:X,2:C}for,v:rangestrs1{fmt。Println(v)}}输出结果abcgorunmain。goa1:〔123〕a2:〔123〕a3:〔123〕a4:〔123〕a5:〔123〕a6:〔321〕a7:〔321〕XAC
8。数组的逆置packagemainimportfmtfuncmain(){mystr:〔5〕string{a,b,c,d,e}fmt。Println(mystr)fori,j:0,len(mystr)1;ij;i,ji1,j1{mystr〔i〕,mystr〔j〕mystr〔j〕,mystr〔i〕}fmt。Println(mystr)}输出结果abcgorunmain。go〔abcde〕〔edcba〕
9。求数组的最大值、最小值、平均值packagemainimport(fmt)funcmain(){varintarry〔10〕intintarry〔10〕int{1,9,2,8,7,6,0,11,5,56}varmaxintarry〔0〕varminintarry〔0〕varsumintarry〔0〕fori:1;ilen(intarry);i{ifminintarry〔i〕{minintarry〔i〕循环每一次保留最小值}ifmaxintarry〔i〕{maxintarry〔i〕循环每一次保留最大值}sumintarry〔i〕字符串叠加}fmt。Println(intarry)fmt。Println(max,min)fmt。Println(sum,float32(sum)float32(len(intarry)))}输出结果abcgorunmain。go〔192876011556〕56010510。5改进版packagemainimport(fmtmathrandtime)funcmain(){rand。Seed(time。Now()。Unix())随机数种子varintarry〔10〕intfori:0;ilen(intarry);i{intarry〔i〕rand。Intn(1000)}varmaxintvarminintgolang默认值为0varsumintfori:0;ilen(intarry);i{ifminintarry〔i〕{minintarry〔i〕循环每一次保留最小值}ifmaxintarry〔i〕{maxintarry〔i〕循环每一次保留最大值}sumintarry〔i〕字符串叠加}fmt。Println(intarry)fmt。Println(max,min)fmt。Println(sum,float32(sum)float32(len(intarry)))}输出结果abcgorunmain。go〔571210684317251250436702334632〕7020这个程序有点错误4387438。7修改版packagemainimport(fmtmathrandtime)funcmain(){rand。Seed(time。Now()。Unix())随机数种子varintarry〔10〕intfori:0;ilen(intarry);i{intarry〔i〕rand。Intn(1000)}varmaxintarry〔0〕varminintarry〔0〕varsumintarry〔0〕fori:0;ilen(intarry);i{ifminintarry〔i〕{minintarry〔i〕循环每一次保留最小值}ifmaxintarry〔i〕{maxintarry〔i〕循环每一次保留最大值}sumintarry〔i〕字符串叠加}fmt。Println(intarry)fmt。Println(max,min)fmt。Println(sum,float32(sum)float32(len(intarry)))}输出结果abcgorunmain。go〔35155651728740325855334335194〕556553641364。1
10。对数组字符串进行连接packagemainimportfmtfuncmain(){string1:〔。。。〕string{王晓,王大晓,清华大学}str:fori:0;ilen(string1);i{strstring1〔i〕}fmt。Println(str)}输出结果abcgorunmain。go王晓王大晓清华大学
11。冒泡排序法的实现packagemainimportfmtfuncmain(){varintarray〔。。。〕int{1,9,2,7,3,8,4,6}fmt。Println(原始数据:,intarray)forj:0;jlen(intarray)1;j{fori:0;ilen(intarray)1j;i{ifintarray〔i〕intarray〔i1〕{intarray〔i〕,intarray〔i1〕intarray〔i1〕,intarray〔i〕}}fmt。Println(intarray)}fmt。Println(最终的结果:,intarray)}输出结果abcgorunmain。go原始数据:〔19273846〕〔12738469〕〔12374689〕〔12346789〕〔12346789〕〔12346789〕〔12346789〕〔12346789〕最终的结果:〔12346789〕
12。数组做函数的参数packagemainimportfmtfuncchange(a〔5〕int){数组作为参数,具备副本机制a〔0〕100fmt。Println(函数change的a:,a)fmt。Println(函数changea〔0〕:,a〔0〕)}funcmain(){vara〔。。。〕int{1,2,3,4,5}change(a)fmt。Println(main的函数a,a)fmt。Println(main的函数a〔0〕,a〔0〕)}输出结果abcgorunmain。go函数change的a:〔1002345〕函数changea〔0〕:0xc0000ac060main的函数a〔12345〕main的函数a〔0〕0xc0000ac030进阶版packagemainimportfmtfuncchange(a〔5〕int){数组作为参数,具备副本机制a〔0〕100fmt。Println(函数change的a:,a)fmt。Println(函数changea〔0〕:,a〔0〕)}funcmain(){vara〔。。。〕int{1,2,3,4,5}change(a)fmt。Println(main的函数a,a)fmt。Println(main的函数a〔0〕,a〔0〕)}输出结果abcgorunmain。go函数change的a:〔1002345〕函数changea〔0〕:0xc0000181b0main的函数a〔1002345〕main的函数a〔0〕0xc0000181b0
13。二维数组:赋值和地址packagemainimportfmtfuncmain(){a1:〔3〕〔4〕int{{1,2,3,4},{5,6,7,8},{9,10,11,12}}fori:0;i3;i{3行fmt。Println(a1〔i〕)forj:0;j4;j{4列fmt。Printf(3dx,a1〔i〕〔j〕,a1〔i〕〔j〕)}fmt。Println()}}输出结果abcgorunmain。go〔1234〕1c00008c0602c00008c0683c00008c0704c00008c078〔5678〕5c00008c0806c00008c0887c00008c0908c00008c098〔9101112〕9c00008c0a010c00008c0a811c00008c0b012c00008c0b8版本2packagemainimportfmtfuncmain(){a2:〔。。。〕〔4〕int{1:{1,2,3,4},2:{5,6,7,8}}默认都是0fori:0;i3;i{3行fmt。Println(a2〔i〕)forj:0;j4;j{4列fmt。Printf(3dx,a2〔i〕〔j〕,a2〔i〕〔j〕)}fmt。Println()}}输出结果abcgorunmain。go〔0000〕0c00008c0600c00008c0680c00008c0700c00008c078〔1234〕1c00008c0802c00008c0883c00008c0904c00008c098〔5678〕5c00008c0a06c00008c0a87c00008c0b08c00008c0b8
14。二维数组:打印和输出packagemainimportfmtfuncmain(){a:〔。。。〕〔4〕int{1:{1,2,3,4},2:{5,6,7,8}}默认都是0fori,v:rangea{forj,value:rangev{v一维数组fmt。Printf(a〔d〕〔d〕v,i,j,value)}fmt。Println()}}输出结果abcgorunmain。goa〔0〕〔0〕0a〔0〕〔1〕0a〔0〕〔2〕0a〔0〕〔3〕0a〔1〕〔0〕1a〔1〕〔1〕2a〔1〕〔2〕3a〔1〕〔3〕4a〔2〕〔0〕5a〔2〕〔1〕6a〔2〕〔2〕7a〔2〕〔3〕8
15。指针数组,每一个元素都是地址packagemainimportfmtfuncchangeArrays(b〔3〕int){b〔0〕100}funcmain(){vara〔3〕int〔3〕int{1,2,3}varb〔3〕int〔3〕int{a〔0〕,a〔1〕,a〔2〕}指针数组,每一个元素都是地址changeArrays(b)fmt。Println(a,b)}输出结果abcgorunmain。go〔10023〕〔0xc0001380200xc0001380280xc000138030〕
17。数组的内存分配packagemainimport(fmttimeunsafe)funcmain(){fatalerror:outofmemoryVirtualAllocof955514880000bytesfailedwitherrno1455varvedio〔55514880000〕intfmt。Println(unsafe。Sizeof(vedio))内存分配到栈上,函数运行完成,内存自动回收堆内存,栈1M10M}funcmain1(){fatalerror:outofmemoryVirtualAllocof955514880000bytesfailedwitherrno1455varvedio〔955514880000〕intvarvedionew(〔5551488000〕int)内存分配到堆,golang自动回收内存time。Sleep(time。Second1)fmt。Println(unsafe。Sizeof(vedio))堆内存,栈1M10M长期使用,内存较大,new,堆短期使用,内存较小,栈}