1、值类型
布尔类型 | (1)取值:true、false (2)运算符:!、&&、||、==、!= |
整数类型 | (1)int:有符号整数 (2)uint:无符号整数 (3)可有后缀,但必须为8的整数倍,如:int8、int16 int默认为int256,uint默认uint256 |
枚举类型 | (1)枚举类型,从0开始 例:enum SomeEnum {DEFAULT,ONE,TWO}; DEFAULT=0 ONE =1 TWO=2 |
地址类型 | (1)长度为20字节【与以太坊账户地址长度一致】 (2)一些方法:
扫描二维码关注公众号,回复:
3082497 查看本文章
【a】<address>.balance:类型为uint,表示账户余额 【b】<address>.transfer(uint 256 amount):发送amount数量的以太币给address表示的账户,单位是wei 【c】<address>.send(uint 256 amount) returns(bool):与前面相似,区别是,上面的若失败,则异常且终止代码 而send则只是返回false,代码继续执行 (3)底层操作: 【a】<address>.call(....)returns(bool):发起底层的CALL命令,失败将返回false; 【b】<address>.callcode(....)returns(bool):发起底层的CALLCODE指令,失败将返回false; 【c】<address>.delegatecall(....)returns(bool):发起底层的DELETECCALL指令,失败将返回false; |
2、引用类型
(1)数组:solidity中的数组包括固定长度的数组,以及运行时可动态改变长度的动态数组。对于账户存储中的数组,数组元素可以是任何类型,而内存中的数组,其数组元素不可以是映射。
- 固定长度数组:array[5]
- 动态长度数组:array[]
成员变量和函数有:
- length:取得数组长度。【对于账户存储中的数组,可以通过修改数组的length成员动态地改变数组的长度,而内存中的数组在创建之后,就无法修改长度了】
- push:对于账户存储中的动态数组以及bytes类型的变量,可以通过调用push方法在数组尾部添加元素,返回值为数组新长度。
- bytes和string:特殊数组。【bytes用于表示任意长度的字节数据,而string用于表示任意长度的字符数据(utf-8编码)】【string不支持lengeth成员和下标访问】【用bytes(s)可以将字符串s转换成bytes类型,但是转换成bytes类型时,会将多字节的字符展开】【如果想要取的一个字符串长度,可以用bytes(s).lengeth,但长度有可能有些问题,按utf-8编码的】
- 由于EVM限制,外部函数调用无法返回一个动态长度的数组,唯一的做法是将需要返回的内容放到一个足够长的定长数组中。
(2)结构体:solidity中结构体与c语言类似,允许开发者根据所需来定义
定义举例:
contract Funding{
struct Donator{//结构体
address add;
uint amount;
}
}
(3)映射(Mapping):键值对映射关系的结构,声明如下:mapping(keyType=>ValueType),其中KeyType 是除了映射、动态数组、合约、枚举类型、结构体 以外的任何类型,ValueType则可以是任何类型,包括映射本身。映射并不存储键的数据,仅存储Keccak-256散列值。