这几天再写智能合约的过程中发现对Solidity语法还是不慎了解,踩了很多坑,所以这几天还是细细梳理下语法。
概述
Solidity 是一种 静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推倒出类型)。Solidity 提供了一些基本类型可以用来组合成复杂类型。
Solidity 类型分为两类:
- 值类型 (Value Type) - 变量在赋值或传参时总是进行值拷贝。
- 引用类型 (Reference Types)
值类型 (Value Type)
值类型包含:
- 布尔类型 (Booleans)
- 整型 (Integers)
- 定长浮点型 (Fixed Point Numbers)
- 定长字节数组 (Fixed-size byte arrays)
- 有理数和整型字面量 (Rational and Integer Literals)
- 字符串字面量(String literals)
- 十六进制字面量(Hexadecimal literals)
- 枚举 (Enums)
- 函数 (Function Types)
- 地址 (Address)
- 地址字面量 (Address Literals)
值类型传值时,会临时拷贝一份内容出来,而不是拷贝指针,当你修改新的变量时,不会影响原来的变量的值。
int a = 100; // a == 100 int b = a; // b == 100,a == 100 b = 300; // b == 300,a == 100
引用类型 (Value Type)
引用类型包含:
- 不定长字节数组(bytes)
- 字符串(string)
- 数组(Array)
- 结构体(Struts)
引用类型,赋值时,我们可以值传递,也可以引用即地址传递,如果是值传递,和上面的案例一样,修改新变量时,不会影响原来的变量值,如果是引用传递,那么当你修改新变量时,原来变量的值会跟着变化,这是因为新就变量同时指向同一个地址的原因。
今天就简单记录下有哪些是值类型,哪些是引用类型,以及值类型和引用类型的简单区别。下一篇文章再学习引用类型赋值时如何进行值传递和地址传递