Solidity教程

Solidity 变量数据位置

规则1 – 状态变量

状态变量总是存储在存储区中。
pragma solidity ^0.5.0;
contract DataLocation {
   // storage
   uint stateVariable;
   uint[] stateArray;
}
此外,不能显式地标记状态变量的位置。
pragma solidity ^0.5.0;
contract DataLocation {
   uint storage stateVariable; // 错误
   uint[] memory stateArray; // 错误
}

规则2 – 函数参数与返回值

函数参数包括返回参数都存储在内存中。
pragma solidity ^0.5.0;
contract DataLocation {
   // storage
   uint stateVariable;
   uint[] stateArray;
   function calculate(uint num1, uint num2) public pure returns (uint result) {
       return num1 + num2
   }
}
此处,函数参数 uint num1uint num2,返回值 uint result 都存储在内存中。

规则3 – 局部变量

值类型的局部变量存储在内存中。但是,对于引用类型,需要显式地指定数据位置。
pragma solidity ^0.5.0;
contract Locations {
  /* 此处都是状态变量 */
  // 存储在storage中
  bool flag;
  uint number;
  address account;
  function doSomething() public {
    /* 此处都是局部变量 */
    // 值类型
    // 所以它们被存储在内存中
    bool flag2;
    uint number2;
    address account2;
    // 引用类型,需要显示指定数据位置,此处指定为内存
    uint[] memory localArray;
  }
}
不能显式覆盖具有值类型的局部变量。
 function doSomething() public {
    /* 此处都是局部变量 */
    // 值类型
    bool memory flag2; // 错误
    uint Storage number2; // 错误
    address account2;
  }

规则4 – 外部函数的参数

外部函数的参数(不包括返回参数)存储在Calldata中。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4