咨询Solidity中new address[](2)语句的具体作用与用法
Solidity 代码语句拆解
你遇到的原代码如下:
address[] memory path = new address[](2);
整句各部分逐段释义
address[]:声明变量类型为地址类型动态数组,数组内的所有元素都必须是合法的以太坊address类型值。memory:数据位置修饰符,代表该数组存储在临时内存空间中,仅在当前函数执行周期内有效,不会被永久写入链上存储,gas开销远低于链上存储变量,适合存放函数运行时的临时中间数据。path:当前声明的数组变量名,这类命名的数组最常出现在DEX兑换逻辑中,用来记录代币兑换的路径地址序列。=:赋值操作符,将右侧实例化完成的数组对象赋值给左侧声明的path变量。
new address[](2)的具体作用
这部分是整句的实例化逻辑,作用是在内存中创建一个初始长度为2的address类型数组实例,各子部分含义:
new:Solidity中用于实例化内存数组、新合约实例的关键字,注意通过new创建的内存数组,必须在创建时指定固定长度,创建完成后无法再修改数组长度,这一点和链上storage存储的动态数组可以随意push、修改长度的特性有明显区别。address[]:指定当前实例化的对象类型为地址数组。(2):指定新数组的初始长度为2,数组创建完成后会自动生成2个可访问的元素位,索引分别为0和1,每个位置的初始默认值为零地址address(0),后续可以直接通过索引给对应位置赋值。
常见使用示例
这类长度为2的path数组一般用于单跳兑换场景,实例化完成后通常会按如下逻辑赋值:
// 以WETH兑换USDC的单跳路径为例 path[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH合约地址 path[1] = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC合约地址
内容的提问来源于stack exchange,提问作者Seaworn
相关产品推荐
相关产品推荐

