![f567f74ae0b812cd22f76e9eb3651a9c.png](https://i-blog.csdnimg.cn/blog_migrate/169ec5d5187f9422ca2fe8c526728286.jpeg)
文章目录
- 值类型与引用类型
- Solidity语言特点
- 数据类型分类
- 代码演示
- 值类型演示
- 测试数据类型类型
- 引用类型注意事项 (重点)
- 引用类型之memory测试
- 引用类型之storage测试
值类型与引用类型
Solidity语言特点
- 没有main、没有多线程、合约与合约里面的函数都是通过地址调用
- 语法简单、类似javascript
- 不成熟,但版本更新较快,且兼容性不太好
- 具备面向对象特性:封装、继承、多态
数据类型分类
值类型 (值传递)、引用类型 (指针传递, 类似桌面的快捷方式)
值类型包括
- 布尔值
- 整型
- 地址(Address)
- 定长字节数组
- 有理数和整型
- 枚举类型
- 函数
引用类型
solidity没有指针,是采用storage进行修饰,复杂类型占有较大的空间,在拷贝时占用空间较大。下面这些类型设置为引用
- 数组 (Array)
- 结构体
- 映射
代码演示
值类型演示
![5e7d3ce6389e369b864cb4b0fa645ac8.png](https://i-blog.csdnimg.cn/blog_migrate/f03d5b6901a70b5762255ea971ffe5c8.jpeg)
测试数据类型类型
![c546b4f903d1a5a3170b573f4c8401b3.png](https://i-blog.csdnimg.cn/blog_migrate/ab919e457e994752937af8c544ebe98e.jpeg)
引用类型注意事项 (重点)
- 值类型没有数据位置的概念,每次赋值时都有独立的副本!
- 引用类型包括:数组、结构体,映射、字符串(bytes数组), 只有引用类型才有数据位置的概念
- 三种位置,先掌握内存与存储变量
3.1 内存其生命周期只存在与函数调用期间 --> 函数调用完毕后消失
3.2 存储: 状态变量 —> 随着合约部署到区块链中(以太坊分布式账本)
3.3 调用数据 ( 暂时理解成内存变量 略)
4.默认的函数参数,包括返回的参数,他们是memory 默认的局部变量是storage。而状态变量只能是storage
注意:在版本0.5.0之前,数据位置(memory/storage)可以省略,在0.5.0之后需要指定
引用类型之memory测试
![17cc6ff7a2adf3c0967b052b33aa9245.png](https://i-blog.csdnimg.cn/blog_migrate/0138e65026e308bc9f9014ffedce7e05.jpeg)
引用类型之storage测试
![201ee71d21cdfe9aea5a58cd25ec2809.png](https://i-blog.csdnimg.cn/blog_migrate/6a1fda21f8301ca80f64b7afc092d302.jpeg)
![9d8b1fd2d1873718ea9168d164e23bd1.png](https://i-blog.csdnimg.cn/blog_migrate/b1e43aca0ec514464083040d8cd6c931.jpeg)
![936bab9f4d6d9583f6d2d2cd79fa330a.png](https://i-blog.csdnimg.cn/blog_migrate/99f3c7efda03d22213ea6e576ed6381b.jpeg)