一、函数参数与返回值概述
Solidity 函数通过参数接收输入,通过返回值给出结果。对于复杂类型参数(如数组、字符串),常常需要明确数据的位置。
常用的数据位置有:
- memory:更像临时处理区
- calldata:更像外部传入的只读输入区
二、memory 关键字详解
memory 表示这个数据只在当前函数执行时临时存在。
常见场景:
- 函数参数是字符串
- 函数参数是数组
- 函数里临时创建复杂数据
示例代码:
function sum(uint256[] memory numbers) public pure returns (uint256) { uint256 total = 0; for (uint256 i = 0; i < numbers.length; i++) { total += numbers[i]; } return total; }
三、calldata 关键字详解
calldata 常用来表示 external 函数接收的外部只读输入。
示例代码:
function batchCheck(address[] calldata users) external view returns (uint256) { return users.length; }
四、常见问题答疑
- 函数参数是什么?
调用者传给函数的输入。
- 返回值是什么?
函数执行后返回给外部的结果。
- 为什么函数需要参数?
因为不同调用场景需要不同输入,不能都写死。
- 为什么函数有时需要返回值?
因为调用者需要知道计算结果或查询结果。
- string memory newName 中的 memory 大概表示什么?
这是函数执行期间临时使用的字符串数据。
- address[] calldata users 中的 calldata 大概表示什么?
这是外部调用传进来的只读地址数组输入。
- memory 和 calldata 最粗略的区别是什么?
一个偏临时处理,一个偏外部原始输入。
- 为什么真实业务函数里经常既有参数,又有返回值?
因为它们需要根据输入做判断,再把结果告诉调用者。