第8天:Solidity 函数参数与返回值详解

3 阅读2分钟

一、函数参数与返回值概述

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; }


四、常见问题答疑

  1. 函数参数是什么?

调用者传给函数的输入。

  1. 返回值是什么?

函数执行后返回给外部的结果。

  1. 为什么函数需要参数?

因为不同调用场景需要不同输入,不能都写死。

  1. 为什么函数有时需要返回值?

因为调用者需要知道计算结果或查询结果。

  1. string memory newName 中的 memory 大概表示什么?

这是函数执行期间临时使用的字符串数据。

  1. address[] calldata users 中的 calldata 大概表示什么?

这是外部调用传进来的只读地址数组输入。

  1. memory 和 calldata 最粗略的区别是什么?

一个偏临时处理,一个偏外部原始输入。

  1. 为什么真实业务函数里经常既有参数,又有返回值?

因为它们需要根据输入做判断,再把结果告诉调用者。