solidity:整形、地址、枚举、定长数组等的值传递代码
时间: 2024-11-03 19:23:29 浏览: 51
在Solidity,一种用于编写智能合约的高级语言,值传递是指数据在函数调用之间按其原始形式进行复制。下面是关于不同类型的值传递示例:
1. 整形(Integers):当你传递整数时,比如`uint256 x = 42;`, 在函数内部更改 `x` 的值不会影响原始变量。例如:
```solidity
function foo(uint256 _x) public {
_x += 10; // 这里改变的是副本,原值x保持不变
}
```
调用 `foo(x)` 后,`x` 的值仍为 42。
2. 地址(Addresses):同样,地址在函数间也是传引用,不会创建新的实例。如:
```solidity
address owner;
function transferOwnership(address newOwner) public {
owner = newOwner; // 新地址赋值给owner,原地址不变
}
```
`transferOwnership` 函数改变了 `owner` 指向的新地址,不影响原来地址指向的实体。
3. 枚举(Enums):枚举常量本质上也是整数值,所以值传递规则类似整型:
```solidity
enum Color { Red, Green, Blue }
function setColor(Color color) public {
// 类似整数处理
}
```
4. 定长数组(Fixed-Length Arrays):数组在 Solidity 中不是引用传递,而是元素逐个传递的深拷贝。例如:
```solidity
uint[4] memory numbers;
function passArray(uint[4] _numbers) public {
numbers = _numbers; // 数组元素会被复制,原数组不受影响
}
```
这里 `_numbers` 被复制到 `numbers`,修改后者不会影响前者。
阅读全文