固定数组
首先我们来看看固定数组的默认值。
pragma solidity ^0.4.16;
contract FixArray{
uint[5] arr;
function getDefaultArrContent() view returns(uint[5]){
return arr;
}
}
编译执行后,我们可以看到,固定数组初始值都为0.
函数对固定数组初始值进行修改:
pragma solidity ^0.4.16;
contract FixArray{
uint[5] arr;
function init(){
arr[0] = 100;
arr[1] = 200;
}
function getArrayContent() view returns(uint[5]){
return arr;
}
}
我们先执行init
方法,然后在执行获取数组内容方法,会发现结果符合我们的预期0: uint256[5]: 100,200,0,0,0
再者,我们看看对于固定数组内部元素求和。
pragma solidity ^0.4.16;
contract FixArray{
uint[5] arr = [1,2,3,4,5];
function init(){
arr[0] = 100;
arr[1] = 200;
}
function sumArr() view returns(uint){
uint sum = 0;
for(uint i = 0;i< arr.length;i++){
sum += arr[i];
}
return sum;
}
}
对于上面的代码而言,我们先直接通过字面量的方式初始化一个固定数组。然后利用for
循环进行累计求和。
其中的sum += arr[i]
等同于sum = sum+arr[i]
;最终结果是15,符合我们的预期。
最后,我们再来看看 ,对于固定数组,能否修改它的长度或者是添加元素呢?闭上眼睛,思考30s。
经过我们演示,发现获取固定长度数组是没有任何问题的,但是这样暴力去修改固定数组长度,编译器可是不能答应的。(这里大家可以点选左侧,编译器下方的自动编译,就不能每次都去点编译啦)
最后的最后,我们在来看看是否能够进行push
操作呢?
显然,也是行不通的。在这里,我们的固定数组就告一段落了。
可变长度数组
上面我们说了固定数组,最后提到固定数组是没有办法改变长度和添加元素的,如果有这个诉求,就要引入我们的可变长度数组了
。
另外,我们上面学了那么多数组,会发现一个规律,就是数组主要就那么几个知识点
- 默认值与初始化赋值
- 获取数组长度和数组内容
- 遍历数组内容
- 改变数组长度和数组内容
那么我们的可变长数组当然也不例外了。至于初始化、获取数组长度和内容,和我们的固定数组是一样的,这里就不在演示了。主要来看看不一样的改变数组长度和数组内容。如下:
pragma solidity ^0.4.16;
contract DynamicArray{
uint[] arr = [1,2,3,4,5];
function changeLength(){
arr.length = 1;
}
function changeLength2(){
arr.length = 10;
}
function getContent() view returns(uint[]){
return arr;
}
function getLength() view returns(uint){
return arr.length;
}
function push(){
arr.push(6);
}
}
验证结果,正是说明了固定数组和动态长度数组的差别。在这里,我们一维数组就介绍完了。下节,我们将想大家介绍数组中的二维数组。