欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
全部教程·
区块链·
Solidity
[目录]
·
Solidity 结构体
Solidity 教程
Solidity 开发环境搭建
Solidity 基础语法
Solidity 编译运行
Solidity 代码注释
Solidity SPDX 语法
Solidity 数据类型
Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名
Solidity 教程
Solidity 开发环境搭建
Solidity 基础语法
Solidity 编译运行
Solidity 代码注释
Solidity SPDX 语法
Solidity 数据类型
Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名Solidity 结构体 struct
类似于C语言,solidity 也有结构体 struc 类型,用于表示复合型数据。
结构体 struc 类型是引用类型。
例如,一本书的信息:
- Title
- Author
- Book ID
- Owner
就可以用结构体来表示。
1. 定义结构体
要定义结构,使用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;
}
2. 访问结构体成员
要访问结构的任何成员,使用成员访问操作符(.)。
示例
// 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
3. 结构体操作方法
结构体变量共有三种初始化方式。我们还可以定义结构体数组、结构体状态变量,并对其进行操作。
示例
// 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
Solidity 映射 mapping 用于以键值对的形式存储数据,等同于其它编程语言的哈希表或字典。映射 mapping 是智能合约中很常用的一种数据类型,它是引用类型。下面是声明映射类型的语法。m ...
AI 中文社