代码编织梦想

抛出问题,外部函数的入参参数是动态数组,那么必然是memory存储类型,那么赋值给状态变量会怎样呢,赋值给其他memory动态数组又会是怎样呢,如下代码友好的介绍

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;
import "hardhat/console.sol";

contract TestMemory{
    uint[] public data;

    function option(uint[] memory mArray) public{
        // memory->storage 属于值拷贝,storage->memory 也属于值拷贝
        data=mArray;
        // 同存储类型变量赋值,属于引用,但是此时叫引用指针,和指向的变量有所不同,区别在于引用指针不能再被重新整个赋值
        uint[] storage y =data;
        // 不安全的写法,会报警
        uint y3=y[2];
        //memory 引用类型不允许通过改方式改变长度,但是storge的可以,但是0.8等高版本后,一律不再允许
        //y.length=2;
        delete data;
        //引用指针不能再被重新整个赋值
        //y=mArray;
        data=mArray;
        // 指针变量不允许操作delete
        //delete y;
    


    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37298500/article/details/126983245

『0006』- solidity值类型与引用类型_黎跃春的博客-爱代码爱编程

孔壹学院:国内区块链职业教育领先品牌 作者:黎跃春,区块链、高可用架构工程师 微信:liyc1215 QQ群:348924182 博客:http://liyuechun.org 在前几节中我们初步认识了简单

深入理解solidity——引用类型_黄嘉成的博客-爱代码爱编程

引用类型(Reference Types) 引用类型比上述的值类型需要更加小心地处理。因为复制拷贝他们可能开销相当大, 我们必须考虑把它们存储在内存(这不是持久化)或者存储器(状态变量存放的地方)。 数据存储位置(Dat

警惕!solidity缺陷易使合约状态失控_安比实验室secbit的博客-爱代码爱编程

作者:安比(SECBIT)实验室 & 轻信科技(LedgerGo) 本文以蜜罐合约和 BancorLender 合约为例,详细介绍 Solidity 语言中「未初始化的 storage 指针」问题,并追踪 S

solidity语言学习(6) —— 引用类型_麦神无敌的博客-爱代码爱编程

引用类型 复杂类型,比如一些并不是总能适应与256bits的类型,必须比我们见过的值类型更加慎重的处理。因为复制他们需要较昂贵的花费,所有我们不得不思考我们是否希望将其存储在内存里(并不长久的)或者存储里(状态变量就在这里

区块链:solidity值传递&值类型与引用类型_十二指环的博客-爱代码爱编程

Solidity值传递 pragma solidity ^0.4.4; contract Person{ uint _age; function Person(uint age) { _

03_值类型与引用类型-爱代码爱编程

文章目录 值类型与引用类型Solidity语言特点数据类型分类代码演示值类型演示测试数据类型类型引用类型注意事项 (重点)引用类型之memory测试引用类型之storage测试 博文配套视频:区块链之公有链、联盟链系列课程 值类型与引用类型 Solidity语言特点 没有main、没有多线程、合约与合约里面的函数都是通过地址调用语法简单、

solidity数据类型-爱代码爱编程

solidity 数据类型 Solidity 数据类型可以大致分为以下两种类型: 值类型引用类型这两种类型在变量赋值和存储在 EVM 中的方式方面有所不同。值类型维护变量的独立副本,并且在一个变量中更改值不会影响另一个变量中的值。但是,更改引用类型变量中的值可确保任何引用该变量的地方都会获取更新值。 1. 值类型 如果一个类型将数据(值)直接保存在

区块链solidity学习笔记(二)-爱代码爱编程

1,获取字节长度 pragma solidity ^0.4.0; contract bytestest{ bytes1 num1=123; // bytes1一个字节占8位二进制位,bytes1=uint8 bytes1 num2=0x7a; // 0111 1010 bytes1 public num3=0x7a; //加入pu

solidity 字符串拼凑_solidity基本语法总结-爱代码爱编程

solidity的三种修饰符 view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它 pure: 也可以自由调用,既不读取也不写入区块链 payable: 常常用于将代币发送给合约地址。 布尔运算 buer.png 整型特性与运算 整型.png 位运算 位运算.png 注意: 在做相关的运算时,需要注意是否

solidity基本语法总结-爱代码爱编程

solidity的三种修饰符 view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它 pure: 也可以自由调用,既不读取也不写入区块链 payable: 常常用于将代币发送给合约地址。 布尔运算 buer.png 整型特性与运算

Solidity学习笔记-爱代码爱编程

Solidity学习笔记 Solidity是为了编写智能合约而创建的编程语言,Solidity运行在以太坊虚拟机中(EVM)。 数据类型 值类型 值类型被用作函数参数或者用在赋值语句中时,总会进行值拷贝 bool 取值为字面常数值 true 和 false,默认false int / uint 有符号和无符号的不同位数的整型变量。支持(in

区块链开发之Solidity编程基础(一)-爱代码爱编程

Solidy是当前编写智能合约的主流语言 概要sol文件结构编译开发引入其他文件注释代码注释文档注释合约状态变量类型值类型1、 布尔类型2、整型3、地址4、定长字节数组5、有理数和整型字面量6、枚举类型7、函数类型引用类型1、数据的存储2、数据传递方式3、引用类型1、数组2、不定长字节数组(Bytes)3、字符串(String)4、结构体(Stru

【跟乐乐学solidity】一 基础:字节数组/普通数组与字符串操作-爱代码爱编程

前言 在solidity中,数组分为两大类,一类是字节数组,一类是普通数组。 这与java不同,java中无论是字节还是其它数据类型的数组,都是一个分类,只有固定长度和动态长度的区别。 而在solidity中字节数组下面又分为固定长度字节数组和动态长度字节数组。普通数组下面也有分为动态数组和固定数组。 其中,字节数组和string字符串类型常常结合到一起

solidity学习日记(一)-爱代码爱编程

1.版本指令 所有的 Solidity 源码都必须冠以 “version pragma” — 标明 Solidity 编译器的版本, 以避免将来新的编译器可能破坏代码。 pragma solidity ^0.4.19; 2.合约 solidity所有的代码都包含在合约中,合约是所有应用的起点。 如下,就是最简单的HelloWorld空合约:

solidity 引用类型_李卓书的博客-爱代码爱编程

数组 声明 type arrayName [ arraySize ]; eg: uint balance[10]; 初始化 uint balance[3] = [uint(1), 2, 3]; 数组成员 lengthpush内存数组 可以使用 new 关键字在内存中创建动态数组。与存储数组相反,不能通过设置 .length 成员来调整内存动态数

solidity,智能合约的学习(2)_bitpen的博客-爱代码爱编程

Solidity中的变量类型 1、数值类型(Value Type):包括布尔、整数等类型,数值类型变量赋值时直接传递数值。 2、引用类型(Reference Type):包括结构体、数组等类型,引用类型变量占用空间大,赋值时直接传递地址。 3、映射类型(Mapping Type):Solidity语言的哈希表。 4、函数类型(Function Ty