Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
            页面加载耗时 0.00 毫秒·物理内存 163.0MB ·虚拟内存 1439.7MB
        
        欢迎来到 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 ...