Solidity中,有一些数据类型由简单数据类型组合而成,相比于简单的值类型,这些类型通常通过名称引用,被称为引用类型
引用类型包括,系统开发合约定制对接唯hkkf5566:
数组 (字符串与bytes是特殊的数组,所以也是引用类型)
struct (结构体)
map (映射)
这些类型涉及到的数据量较大,复制它们可能要消耗大量Gas,非常昂贵,所以使用它们时,必须考虑存储位置,例如,是保存在内存中,还是在EVM存储区中。
在合约中声明和使用的变量都有一个数据位置,指明变量值应该存储在哪里。合约变量的数据位置将会影响Gas消耗量。
pragma solidity ^0.4.22;
contract SimpleStorage{
uint storedDate;
function set (uint x) public{
storedDate = x;
}
function get() public view returns(uint){
return storedDate;
}
}
pragma solidity ^0.4.22;
contract SolidityTest{
constructor() public{
}
function getResult() public view returns(uint){
//这是单行注释
/*
*这是多行注释
*类似其他语言的注释
*/
uint a = 1;
uint b = 2;
uint result = a + b;
return result;
}
}
状态变量
Solidity 支持三种类型的变量:
状态变量 – 变量值永久保存在合约存储空间中的变量。
局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。
全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。
Solidity 是一种静态类型语言,这意味着需要在声明期间指定变量类型。每个变量声明时,都有一个基于其类型的默认值。没有undefined或null的概念。
pragma solidity ^0.4.22;
contract SolidityTest1{
uint storedDate; //状态变量
constructor() public {
storedDate = 10; //使用状态变量
}
}
pragma solidity ^0.4.22;
contract SolidityTest2{
uint storedDate; //状态变量
constructor() public{
storedDate = 10;
}
function getResult() public view returns(uint){
uint a=1; //局部变量
uint b=2;
uint result = a+b;
return result;//访问局部变量
}
}