solidity基本语法总结

  1. solidity的三种修饰符

view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它
pure: 也可以自由调用,既不读取也不写入区块链
payable: 常常用于将代币发送给合约地址。

  1. 布尔运算
buer.png
  1. 整型特性与运算
整型.png
  1. 位运算
位运算.png

注意:

  • 在做相关的运算时,需要注意是否会溢出的问题;除零等异常问题
  • 在solidity中,字面值会先计算再赋值,为了更好的保留精度
  1. 固定长度的字节数组(静态)
固定长度字节数组.png
  1. 固定长度字节数组的扩充和压缩
固定长度字节数组扩充压缩.png
  1. 动态的字节数组
mmapping2.png
  1. 固定长度的字节数组与动态数组的转换
固定长度字节数组与动态数组转换.png
  1. 修改string类型的数据

    string.png

说明:
* 字符串可以使用单引号或者双引号
* 中文在string中使用utf8的编码方式存储,占用3个byte
* 特殊字符占1个byte

  1. 将动态bytes字节数组转换为string类型
动态bytes转换维string.png
  1. 将固定长度的字节数组转换为string类型
固定长度字节数组转换string.png
  1. 定长数组
定长数组.png
  1. 动态数组
动态数组.png
  1. 二维数组
    说明:
    1. solidity的二维数组与其他语言不同,[2] [3]表示3行2列,而其他语言为2行3列。
    2. 在遍历数组的时候又会转变成普通的存储情况。比较奇怪。
    3. 二维动态数组与一维数组类似,可以改变其数组长度。
二维数组.png
  1. 数组字面值
数组字面值.png
  1. 结构体的两种初始化方法
pragma solidity ^0.4.17;

contract StructTest{
    struct student{
        uint id;
        string name;
        mapping(uint=>string) map;
    }
    //默认为storage类型,只能通过storage类型操作结构体中的mapping类型数据
    student storageStu; 
    //mapping类型可以不用在定义时候赋值,而其他类型不赋值则报错
    function init() pure public returns(uint,string){
        student memory stu = student(110,"yorick");
        return (stu.id,stu.name);
    }
    
    function init2() pure public returns(uint,string){
        student memory stu = student({name:"jerry",id:233});
        return (stu.id,stu.name);
    }
    
    function init3() public returns(uint,string,string){
        student memory stu = student({name:"tom",id:666});
        //通过storage类型的变量操作结构体中的mapping
        storageStu = stu;
        storageStu.map[1] = "helloworld";
        return (storageStu.id,storageStu.name,storageStu.map[1]);
    }
    //形参为结构体变量时,为memory类型,并且必须使用internal修饰函数。赋值时也需要指定为memory,否则报错
    function test(student stu) internal {
        //error
        //student s = stu;
    }
}

总结:

  1. 动态bytes的初始化
    new bytes() 可以获取bytes的长度,内容。也可以修改长度和内容。
  2. string
    不能够直接获取长度和内容,需要转换为bytes。注意其中中文占3个字节。
  3. 固定长度字节数组之间的转换
    缩小截断右边内容,扩充在右侧补零。
  4. 固定长度字节数组和动态字节数组之间的转换
    可以使用for循环动态添加元素
  5. 将动态bytes转换为string
    可以直接使用string做强制类型转换。
  6. 将固定长度的字节数组转换为string
    可以先将其转换为动态字节数组,再用string做强制类型转换。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城老湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值