Skip to content

数据类型

编写程序时,变量是必不可少的,它用于存储各种数据信息。

变量由内存空间所分配,并且会根据使用的不同类型来在操作系统中分配相应的内存空间。

Solidity 中,变量类型主要分为三种:

  • 值类型
  • 地址类型
  • 引用类型。

这些变量类型可以存储各种不同的数据信息,如整数类型、字符串类型等。

1. 值类型

值类型是指在声明变量时,该变量既有变量名,也有被赋予的具体数值,这个数值是存在变量所占据的内存空间中的。在 Solidity 中,值类型包括以下几种:

  • 布尔类型(bool) - 布尔类型变量只能存储 true 或 false 这两个值。

  • 整型类型(int8-int256, uint8-uint256) - 整型类型变量用于存储整数值,可以根据数值范围来选择使用 intuintint 是有符号整数类型,可以存储负数;uint 是无符号整数类型,只能存储正数。

  • 地址类型(address) - 地址类型变量涉及以太坊网络中的地址值。地址类型用于存储以太坊网络上的地址,需要设置参数,确定可容纳的地址长度。

  • 固定长字节数组(bytesN) - 固定长字节数组用于存储固定长度的二进制数据。其中,N 表示字节数。

  • 地址字节数组(bytes) - 地址字节数组用于存储长度不固定的二进制数据。

  • 定点数(fixed/ufixed) - 定点数用于存储带小数点的数值,可以根据要求选择采用 fixedufixed 类型。

Solidity 中,值类型变量的存储非常简单,只需要在声明变量时给出不同的数据类型即可。

solidity
pragma solidity ^0.8.0;

contract MyContract {
    uint public a = 1;
    int public b = -2;
    bytes32 public c = 0x01020304;
}

2. 地址类型

地址类型在 Solidity 中用来表示以太坊网络上的地址值,常用于存储以太币或其他代币的所有者地址、智能合约地址等信息。地址类型在 Solidity 中是固定长度的,占用 20 个字节的存储空间。

Solidity 中,可以使用 address 类型来声明一个地址变量。例如:

solidity
address public owner;

上述代码声明了一个公开的地址类型变量 owner,它用于存储某个智能合约的所有者地址。

Solidity 中,可以使用多种方式来表示地址值,例如:

直接使用地址字符串表示法,比如:

solidity
address public owner = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;

使用其他类型的值来表示地址,比如:

solidity
address public owner = payable(msg.sender);

其中,msg.sender 代表当前函数调用的发送者地址。

使用地址字面量来创建地址,比如:

solidity
address payable public owner = payable(address(0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2));

在上述代码中,我们使用了地址字面量,将地址 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2 转换为地址类型并存储在 owner 变量中。

需要注意的是,由于 Solidity 中的地址类型包含了以太坊网络上的地址信息,因此在使用地址类型时应该格外小心,以防止地址泄漏或非法使用。

3. 引用类型

Solidity 中,引用类型或复合数据类型是指可以存储多个值的数据类型。以下是引用类型/复合数据类型的几种常见类型:

  • 数组:数组是一组具有相同类型的元素集合。可以使用固定大小或可变大小的数组,可以是元素结构或元素动态数组。

  • 结构:结构是不同类型的数据集合。它们是用关键字“struct”来定义的,并且可以在合同的不同地方使用。

  • 映射:映射是一种键值对数据结构,其中每个键都有一个相关联的值。可以用来存储状态变量在函数间的共享数据。

  • 枚举:枚举是一些有限常量列表的集合。在Solidity中,它们可以用来定义状态变量的状态,从而可以更方便地编写逻辑。