//SPDX-License-Identifier:MIT
pragma solidity >=0.8.7 <0.9.0; //表名这是一个solidity程序,
//>= 表示任何比0.8.7大的版本都适用,包括0.8.7
//<0.9.0表示比0.9.0小的版本都适用,不包括0.9.0
contract SimpleStorage{
uint256 favorateNumber;
// int256 shuzi = 456;
// bool noFavoriteNumber = true;
//string num = "123"; //string本质上就是一种bytes,但string只能存储文本
//address myAddress = 0x17c5678b731F295e701C9A3c65bFe00AB81ca81C;
// bytes32 favoriteBytes = "cat";//bytes变量通常是"0x"开头,然后有一些随机的数字和字母
``javascript
struct People{
uint256 favorateNumber;
string name;
}
mapping (string => uint) public nameToFavorateNumber;
//People public person = People({favorateNumber:2,name:"jack"});
People[] public people;
function store(uint256 _favorateNumber) public {
favorateNumber = _favorateNumber;
favorateNumber = favorateNumber+1;
}
//0x652c9ACcC53e765e1d96e2455E618dAaB79bA595
function add() public pure returns (uint256){
return (1+1);
}
//memory calldata 临时变量,生命周期与函数保持一致,
//既当addPerson这个函数结束时,_name的生命周期也结束了
//memory是可被修改的临时变量
//calldata是不可被修改的临时变量
//storage是可被修改的永久变量
//总结:当结构体、映射和数组在作为参数被添加到不同的的函数时,
//需要给定一个memory或calldata关键字,因为solidity不知道这些变量中
//到底是什么东西,所以会给他们开辟临时的存储空间
function addPerson(string memory _name,uint256 _favorateNumber) public {
// People memory newPeople = People({favorateNumber:_favorateNumber,name:_name}); //二者是一样的
People memory newPeople = People(_favorateNumber,_name);
people.push(newPeople);
nameToFavorateNumber[_name] = _favorateNumber;
}
}
、、、