Solidity 值传递和引用传递详解(2023版)

Solidity中的两种类型传递:

  • 值类型传递memory;
  • 引用类型传递storage;
     

如果一个变量是值类型,那么当把它的值传给另一个变量时,是复制值,对新变量的操作不会影响原来的变量;如果该变量是引用类型,那么当它传值给另一个变量时,则是把该值的地址复制给新的变量。这样操作新变量也会导致旧变量的改变。

值类型:
布尔类型(bool)、整型(int)、地址类型(address)、定长字节数组(bytes)、枚举类型(enums)、函数类型(function);

如果一个变量是值类型,给它赋值时永远是值传递!

引用类型:
字符串(string)、数组(array)、结构体(structs)、字典(mapping)、不定长字节数组(bytes)

如果一个变量是引用类型,给它赋值时可以是值,也可以是引用,这决定于该变量是Storage类型还是Memory类型。

示例代码如下:

// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.7;

contract storage_demo{
    User adminuser;
    struct User{
        string name;
        uint8 age;
        string sex;
    }

    function setUser(string memory _name,uint8 _age,string memory _sex)public{
        adminuser.name=_name;
        adminuser.age=_age;
        adminuser.sex=_sex;
    }

    function getUser()public view returns(User memory){
        return adminuse
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值