本文介绍了在 Solidity 合约中使用复杂数据类型的示例。通过一个实际的合约案例,演示了如何定义结构体、操作数组,以及如何获取调用者和合约的地址。此外,还展示了如何使用固定大小的字节数组。通过这个示例,读者可以更好地理解 Solidity 合约中复杂数据类型的使用方法。
## Solidity 合约中的复杂数据类型示例
在 Solidity 合约中,除了基本数据类型外,还支持复杂数据类型,如结构体和数组。以下是一个示例合约,展示了如何使用结构体、数组和其他数据类型。
```solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract ComplexValueType {
// 定义结构体
struct Person {
string name;
uint age;
}
// 存储结构体数组
Person[] public people;
// 添加结构体到数组
function addPerson(string memory _name, uint _age) public {
people.push(Person(_name, _age));
}
// 获取指定索引的结构体
function getPerson(uint _index) public view returns (string memory, uint) {
Person memory p = people[_index];
return (p.name, p.age);
}
// 获取整个结构体数组
function getPeople() public view returns (Person[] memory) {
return people;
}
// 获取结构体数组的长度
function getPeopleCount() public view returns (uint) {
return people.length;
}
// 获取调用者的地址
function getAddress() public view returns (address) {
return msg.sender;
}
// 获取合约的地址
function getContractAddress() public view returns (address) {
return address(this);
}
// 获取合约的地址(另一种方式)
function testContract() public view returns (address) {
// 使用 contract 类型的变量获取本合约的地址
ComplexValueType myContract = this;
address myAddress = address(myContract);
return myAddress;
}
// 示例:固定大小字节数组
function testFixedByteArray() public pure returns (bytes1) {
bytes3 b3 = 0x111111;
bytes1 b1 = b3[0];
return b1;
}
}
```
在上述示例合约中,我们使用了结构体 `Person` 来存储人员的姓名和年龄。我们还演示了如何向结构体数组添加人员信息、获取人员信息、获取结构体数组长度等操作。此外,还展示了如何获取调用者的地址、合约的地址,以及如何使用固定大小的字节数组。
这个示例合约展示了 Solidity 合约中的复杂数据类型的使用,帮助您更好地理解如何在合约中存储和操作结构体、数组等复杂数据。
声明:
①
凡本网所有原创文章及图片、图表的版权均属WX部落所有,如需转载,需注明“信息来源:WX部落”,并且添加本文地址:http://wxbuluo.com/index/article/126.html
②
凡本网注明“来源:XXX(非WX部落)”的文字及图片内容,均转载自其他媒体,版权归原媒体及作者所有。转载目的在于传递更多的资讯,并不代表本网赞同其观点和对其真实性负责。如有侵权,请联系删除。联系方式:296720094@qq.com
③
本网站的资源部分内容来源于网络,仅供大家学习与参考,如有侵权,请联系站长296720094@qq.com进行删除处理。
④
部分项目课程具有时效性,如发布时间较长请搜索相关课程选择发布时间最近的查看。
⑤
部分具有时效性的项目课程文章,我们会逐步转移到免费类分类开放下载。同时免费分类链接失效不补!
⑥
本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。