solidity的值类型和引用类型

本文介绍了Solidity编程语言中的值类型和引用类型。值类型包括布尔、整型等,而引用类型则涉及数组、字符串等复杂数据结构。了解这些类型有助于更好地进行智能合约的开发。

由于solidity是一个静态类型的语言,所以编译时需明确指定变量的类型(包括本地变量和状态变量),solidity编程语言提供了一些基本类型可以用来组合成复杂类型。

1、值类型(Value Type)

值类型包含:

>布尔(Booleans)

>整型(Integer)

>地址(Address)

>定长字节数组(fixed byte arrays)

>有理数和整型(Rational and Integer Literals,String literals)

>枚举类型(Enums)

>函数(Function Types)

这些类型在传值时,总是值传递,比如在函数传参数,或者在进行变量赋值时。

2、引用类型(Reference Types)

复杂类型,占用空间较大,所以考虑通过引用传递

常见的引用类型有:

>不定长字节数组(Bytes)

>字符串(String)

>数组(Array)

>结构体(Struts)

### Solidity 中引用数据类型的使用方法与特性 #### 1. 引用类型概述 在 Solidity 中,引用类型是指那些通过内存地址来访问的数据类型。这类变量并不直接保存实际值,而是指向存储该值的内存位置。这使得引用类型能够高效地传递大型对象而不必每次都创建完整的副本[^3]。 #### 2. 常见引用类型及其特点 - **结构体 (struct)** 结构体允许定义复杂的数据结构,可以包含多种不同类型的字段。当声明一个新的 struct 实例时,默认会初始化为其成员类型的零值。 - **数组 (array)** 数组分为固定大小动态两种形式。对于动态数组而言,在对其进行赋值操作时可能会触发深拷贝行为;而对于静态数组来说,则通常只会在必要时候才发生浅层复制。 - **映射 (mapping)** 映射是一种键值对集合,其中 key 的范围是有限制的(比如 uint 或 address),value 可以为任意类型。值得注意的是,映射总是存放在 storage 存储区,并且无法遍历所有的 keys[]。 #### 3. 数据位置说明 每一种引用类型都有关联的数据位置属性——`storage`, `memory` `calldata`. 这些关键字决定了变量是在哪里分配以及如何处理它: - Storage 表示持久化状态变量; - Memory 是临时性的,函数调用结束后即消失; - Calldata 则专门用于接收外部传入的消息参数列表。 #### 4. 示例代码展示 下面给出一段简单的 solidity 合约片段,展示了上述三种主要引用类型的定义方式及基本操作: ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Example { // 定义一个名为 Person 的结构体 struct Person { string name; uint age; } // 创建一个 person 类型的状态变量并设置初始值 Person public founder = Person("Alice", 25); // 动态长度字符串数组 string[] private namesList; // mapping from addresses to balances mapping(address => uint) internal accountBalances; function addName(string memory _name) external returns(bool success){ namesList.push(_name); return true; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值