打字猴:1.703876463e+09
1703876463 区块链项目开发指南 [:1703875295]
1703876464 区块链项目开发指南 3.3 数据位置
1703876465
1703876466 截至目前,我们学过的所有编程语言可能都把变量存储在内存中。但是在Solidity中,根据情况的不同,变量可能不存储在内存和文件系统中。
1703876467
1703876468 根据情况的不同,数据总有一个默认位置。但是对于复杂数据类型,例如字符串(string)、数组(array)和结构类型(struct),可以用向类型添加storage或者memory进行重写。函数参数(包括返回参数)默认用memory,本地变量默认用storage。显然,对于状态变量来说,位置强制用storage。
1703876469
1703876470 数据位置很重要,因为它们会改变分配的行为:
1703876471
1703876472 ·storage变量和memory变量之间的分配总是创建一个独立的备份。但如果分配是从memory存储的一种复杂类型到另一种复杂类型,则不创建备份。
1703876473
1703876474 ·到一个状态变量的分配(即使是来自其他状态变量)总是创建一个独立的备份。
1703876475
1703876476 ·不能把memory中存储的复杂类型分配给本地存储变量。
1703876477
1703876478 ·在分配状态变量给本地存储变量的情况下,本地存储变量指向状态变量,也就是说,本地存储变量变为指针。
1703876479
1703876480
1703876481
1703876482
1703876483 区块链项目开发指南 [:1703875296]
1703876484 区块链项目开发指南 3.4 什么是不同的数据类型
1703876485
1703876486 Solidity是一种静态类型语言,变量存储的数据类型需要预先定义。所有变量默认值都是0。在Solidity中,变量是有函数作用范围的,也就是说,在函数中任何地方声明的变量将对整个函数存在适用范围,无论它是在哪里声明的。
1703876487
1703876488 现在让我们看看Solidity提供的不同数据类型:
1703876489
1703876490 ·最简单的数据类型是布尔值,可以是true或者false。
1703876491
1703876492 ·uint8,uint16,uint24,…,uint256分别用于存储无符号的8位,16位,24位,…,256位整数。同理,int8,int16,…,int256分别用于存储8位,16位,24位,…,256位整数。uint和int是uint256和int256的别名。类似于uint和int,ufixed和fixed代表分数。ufixed0x8,ufixed0x16,…,ufixed0x256分别用于存储未签名的8位,16位,24位,…,256位分数。同理,fixed0x8,fixed0x16,…,fixed0x256分别用于存储8位,16位,24位,…,256位分数。如果一个数字超过256位,则使用256位数据类型存储该数字的近似值。
1703876493
1703876494 ·address可以用于存储最大20字节的值(十六进制表示)。它用于存储以太坊地址。address类型有两个属性:balance和send。balance用于检测地址余额,send用于向地址发送以太币。send方法拿出需要转账那些数量的wei,并根据转账是否成功返回true或者false。wei从调用send方法的合约中扣除。用户可以在Solidity中使用0x前缀给变量分配一个十六进制的数值。
1703876495
1703876496
1703876497
1703876498
1703876499 区块链项目开发指南 [:1703875297]
1703876500 区块链项目开发指南 3.4.1 数组类型
1703876501
1703876502 Solidity支持generic和byte两种数组类型。它们支持固定长度和动态长度两种数组,也支持多维数组。
1703876503
1703876504 bytes1,bytes 2,bytes3,……,bytes32是字节数组的类型。byte是bytes 1的别名。
1703876505
1703876506 下面给出了generic数组语法的一个示例:
1703876507
1703876508
1703876509
1703876510
1703876511 关于数组的重要内容如下:
1703876512
[ 上一页 ]  [ :1.703876463e+09 ]  [ 下一页 ]