17-Solidity8.0-数组

366 阅读1分钟

数组在所有的语言当中都是一种常见类型。

在Solidity中,可以支持编译期定长数组和变长数组。 和js中很多方法都很相似,但也有区别的地方,注意好!

image.png

源码:

pragma solidity ^0.8.7;

contract Array{
    uint[] public nums = [1, 2, 3];
    uint[3] public numsFixed = [4, 5, 6];

    function examples() external {
        nums.push(4); //[1, 2, 3, 4]
        uint x;
        x = nums[1]; //2
        nums[2] = 777; //[1, 2, 777, 4]
        delete nums[1]; //[1, 0, 777, 4]
        // !!!
        //这里需要注意 delete数组的某一个下标,并不会改变数组的长度,因为数组是uint类型,所以会变成uint类型的默认值 0 ;
        nums.pop();//[1, 0, 777]
        uint len;
        len = nums.length;

        //create array in memory 内存中创建的数组是局部变量,只能定义定长数组
        //内存中不能创建动态数组,所以要定义数组的长度,改变长度的方法都不可以使用
        uint[] memory a = new uint[](5);
        a[1] = 123;
    }

    function returnArray() external view returns (uint[] memory){
        return nums;
    }
}