pragma solidity ^0.4.0;
contract MemoryTest{
uint[] arrx;//在区块链上定义的状态变量uint[]
uint[] arrw = [1,2,3,4,5,6];
function test1(uint[] arry) public returns(uint ){
//arry在函数上(内存上)-不坚挺,用完就会丢弃
arrx = arry;//将内存的arry拷贝给区块链上的arrx变量;
//当在函数体内部定义了一个可变长度的数组时、实际上默认的类型是storage类型,她指向区块链上
//的arrx,所以当修改Z的元素时、实际上操作的是区块链上的arrx;
uint[] storage Z = arrx;
//通过指针实际上修改了区块链上的arrx的值
Z[0] = 48;
//通过指针实际上修改了区块链上arrx的长度、说明Z和arrx其实是一样的、操作Z的时候会改变arrx的值
Z.length = 48;
}
//返回一个arrx\arrw的第一个元素
function test2() public returns(uint){
return arrx[0];
//return arrw[0];
}
//返回arrx\arrw长度
function test3() public returns(uint){
return arrx.length;
//return arrw.length;
}
//返回arrw的第六个位置的值
function changeIt()public returns(uint){
arrw[5] = 48;
return arrw[5];
}
//查看数组arrx\arrw
function GetIt()public returns(uint[]){
//return arrw;
return arrx;
}
}
40.Solidity-memory2
PragmaticSolidity0.4.0合约:内存与存储操作示例
最新推荐文章于 2025-11-24 15:15:12 发布
该合约展示了在PragmaticSolidity0.4.0中对内存和存储的使用,特别是数组的操作。`MemoryTest`合约创建了两个uint数组,一个在区块链上(arrx),一个在内存中(arrw)。在函数`test1`中,内存中的数组被拷贝到区块链变量,并通过`storage`关键字创建了一个指向arrx的指针。修改指针变量Z的元素和长度实际上影响了区块链上的arrx。其他函数如`test2`,`test3`,`changeIt`和`GetIt`演示了读取和修改数组元素以及获取数组长度的功能。
190

被折叠的 条评论
为什么被折叠?



