Memory 与 Calldata
- 
memory: 通常用 于修饰函数参数和函数内的临时变量。 此类变量存储在内存中,不会永久保存在区块链上。 - 
calldata: 与 memory 类似,存储在内存中而不会永久保存在区块链上。 主要区别是 calldata 变量是不可变的,常用于修饰函数参数。 
了解更多:数据存储位置和赋值行为
以下,我们演示了如何使用 calldata 和 memory 写入数据
contract CalldataAndMemory {
    struct Confi {
        uint16 age;
        string name;
        string wish;
    }
    Confi John;
    Confi Jane;
    function writeToJohn(Confi calldata JohnData) external {
        John = JohnData;
    }
    function writeToJane(Confi memory JaneData) external {
        Jane = JaneData;
    }
}
关于 gas 优化的建议:
🌟 在实际情况中,如果可以使用 calldata,建议使用 calldata 而不是 memory。