Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
页面加载耗时 0.00 毫秒·物理内存 146.5MB ·虚拟内存 1437.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
类似于C语言,solidity 也有结构体 struc 类型,用于表示复合型数据。
结构体 struc 类型是引用类型。
例如,一本书的信息:
就可以用结构体来表示。
要定义结构,使用struct关键字。struct关键字定义了一个新的数据类型,包含多个成员。struct语句的格式如下
struct struct_name {
type1 type_name_1;
type2 type_name_2;
type3 type_name_3;
}
示例
struct Book {
string title;
string author;
uint book_id;
}
要访问结构的任何成员,使用成员访问操作符(.)。
示例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SolidityTest {
struct Book {
string title;
string author;
uint id;
}
Book book;
function setBook() public {
book = Book('Learn Java', 'aizws.net', 1);
}
function getBookAuthor() public view returns (string memory) {
return book.author;
}
}
运行上述程序,先单击 setBook 按钮,然后单击 getBookAuthor 获取图书 Author。
输出结果:
string: aizws.net
结构体变量共有三种初始化方式。我们还可以定义结构体数组、结构体状态变量,并对其进行操作。
示例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SolidityTest {
struct Book {
string title;
string author;
uint id;
address owner;
}
Book public book;
Book[] public books;
mapping(address=>Book[]) public booksByOwner;
function operations() external {
// 结构体直接按照字段顺序,进行初始化
Book memory book1 = Book('Learn Java', 'aizws.net', 1, msg.sender);
// 结构体按照字段名,进行初始化
Book memory book2 = Book({title:'Learn JS', author:'aizws.net', id:2, owner:msg.sender});
// 结构体按照默认值,进行初始化
Book memory book3;
book3.id = 3;
book3.title = 'Learn C';
book3.author = 'aizws.net';
book3.owner = msg.sender;
// 结构体数组操作
books.push(book1);
books.push(book2);
books.push(book3);
// 结构体状态变量操作
Book storage _book = books[0];
delete _book.id;
delete books[0];
_book.id = 100;
}
}
Solidity 映射 mapping 用于以键值对的形式存储数据,等同于其它编程语言的哈希表或字典。映射 mapping 是智能合约中很常用的一种数据类型,它是引用类型。下面是声明映射类型的语法。m ...