目录
第一题
完成以下代码练习
请写一个简单的智能合约 set 和 get,以自己学号后两位为代码 set get。意思是set自己的学号(后两位)get自己的学号(后两位)。
答案
// SPDX-License-Identifier:MIT
pragma solidity ^0.8.0;
contract Test1 {
uint8 id;
function set(uint8 _id) public {
id = _id;
}
function get() public view returns(uint8){
return id;
}
}
第二题
先看代码
// SPDX-License-Identifier:MIT
pragma solidity ^0.8.0;contract Test1 {
string names = 'lyk';
string name = unicode'罗永康';
function change(string memory _name) public {
name = _name;
}
function get() public view returns(string memory){
return name;
}
function f(int _a) public pure returns(int){
_a++;
return _a;
}
}
回答问题
1.并谈谈字符串赋值和定义要注意一些什么?
2.谈谈以上哪些函数会消耗gas,哪些函数不会消耗gas,为什么?
3.pure和view修饰的函数有什么区别?
答案
1.字符串是引用数据类型,当作为函数参数(入参和出参)的时候需要指明在memory内存
当字符串赋值为汉字的时候,需要用unicoode进行转码,因为ASCII无法表示汉字。一个汉字等于3个字节
2.以上change函数会消耗gas,因为修改了状态变量name,无法使用pure和view修饰符。get函数和f函数不会消耗gas,因为使用了pure和view修饰符
3.pure修饰的函数不读取状态变量也不修改状态变量,view只读取状态变量不修改状态变量。被pure和view修饰的函数都不消耗gas