2、var arr []int 这时arr就是一个slice 切片 。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用 。
4、数组创建后,如果没有赋值,有默认值如下:
数值类型数组: 默认值为 0
字符串数组: 默认值为 ""
bool数组: 默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递 ,因此会进行值拷贝。 数组间不会相互影响。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式)。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确,因为[3]int类型传给[3]int类型合法。
分类: 电脑/网络 >>程序设计 >>其他编程语言问题描述:
高手们,帮帮忙看一下啦!!
Microsoft VBScript 运行时错误 错误 '800a0009'
下标越界: 'i'
Cart_List文件部分代码如下
<%
url=request.servervariables("_referer")
ProdIds = Session("ProdIds")
ProdNums = Session("ProdNums")
call up("购物车状态","购物车状态","购物车状态")
response.write "<tr>"
response.write " <td>"
response.write " <table border=1 width=100% cellpadding=4 style='border-collapse: collapse' bordercolor=#DFDFDF>"
response.write "<tr bgcolor=#f2f2f2><td>商品名称</td><td>市场价</td><td>网站价</td><td>订购数量</td><td>小计</td><td>删除</td></tr>"
response.write "<form action=Cart_List method=post name=form1 onsubmit=return CheckFrom()>"
response.write "<input type=hidden name=cmdShow value=Yes>"
if ProdIds<>"" then
aaa=split(ProdNums,",")
bbb=split(ProdIds,",")
pbuynums=Request("pbuynums")
Quatitys=split(Request("pbuynums"),",")
session("y")=ubound(bbb)+1
for i=0 to ubound(bbb)
set rs=server.createobject("adodb.recordset")
sql="select id,product_info_PriceM,product_info_PriceS,Shop_name from product where id="&bbb(i)
rs.open sql,conn,1,1
if rs.eof or rs.bof then
response.write "<tr><td colspan=6 align=center><a href='javascript:history.go(-1)'><<购物车为空,请返回选购商品</a></td></tr>"
else
set id=rs(0)
set product_info_PriceM=rs(1)
set RMB=rs(2)
set product_info_name=rs(3)
While Not rs.EOF
Quatity = Quatitys(i)
If Quatity <>"" Then
x=Quatity
else
x=aaa(i)
if aaa(i)="" then x=1
end if
sum1=sum1 + csng(rmb) * x
sum=FormatNumber(sum1,2,-1)
session("sum")=sum
response.write "<tr>"
response.write " <td><input type=hidden name=mc value="&id&"><a href=Product_Detail?id="&id&" target=_blank>"&Shop_name&"</a></td>"
response.write " <td>¥"&FormatNumber(product_info_PriceM,2,-1)&"</td>"
response.write " <td><font color=#FF0000>¥"&FormatNumber(Rmb,2,-1)&"</font></td>"
response.write " <td><input name=pbuynums value="&x&" size=5 maxlength=5></td>"
response.write " <td>¥"&FormatNumber((csng(rmb)*x),2,-1)&"</td>"
response.write " <td><a href=Cart_Del?MyAction=Del&id="&id&">删除</a></td>"
response.write "</tr>"
rs.MoveNext
Wend
end if
rs.close
set rs=nothing
next
%>
解析:
有问题的部分:
aaa=split(ProdNums,",")
bbb=split(ProdIds,",")
问题:你能保证 aaa、bbb 通过 Split 函数分割出来的数组下标完全一致?若不一致因该在调用前检查一下,问题就出现在这里。
调试:
Response.Write aaa &"<br>" &bbb
Response.End
这样输出一下 aaa、bbb 值看看是否正确。
修改:
你没给出发生错误的位置,我根据代码推断因该是以下代码发生错误:
x=aaa(i)
if aaa(i)="" then x=1
这段代码改为
If i >UBound(aaa) Then
x = 1
ElseIf aaa(i) = "" Then
x = 1
Else
x = aaa(i)
End If
数组是一个由 固定长度 的 特定类型元素 组成的序列,一个数组可以由零个或多个元素组成。 数组是值类型
数组的每个元素都可以通过索引下标来访问,索引下标的范围是从0开始到数组长度减1的位置,内置函数 len() 可以返回数组中元素的个数。
2.类型的打印,结果的第二种打印方式
3.对元素的修改或者赋值
4.判断数组是否相等:长度、类型
4.数组的地址:连续存储的空间
5.数组的赋值、地址、取值
6.数组的默认值
7.数组的初始化
8.数组的逆置
9.求数组的最大值、最小值、平均值
10.对数组字符串进行连接
11.冒泡排序法的实现
12.数组做函数的参数
13.二维数组:赋值和地址
14.二维数组:打印和输出
15. 指针数组,每一个元素都是地址
17.数组的内存分配