Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名Solidity 变量
Solidity 变量 Solidity 特殊变量 Solidity 变量默认值 Solidity 变量作用域 Solidity 常量Solidity 运算符
Solidity 运算符 Solidity 算术运算符 Solidity 比较运算符 Solidity 逻辑运算符 Solidity 位运算符 Solidity 赋值运算符 Solidity 条件运算符Solidity 条件语句
Solidity 条件语句 Solidity if语句 Solidity if…else 语句 Solidity if…else ifSolidity 循环语句
Solidity 循环语句 Solidity while 循环 Solidity do 循环 Solidity for 循环 break 与 continueSolidity 复杂数据
Solidity 字符串 Solidity 数组 Solidity 结构体 Solidity 映射 Solidity 枚举 Solidity 类型转换Solidity 数据位置
Solidity 数据位置 Solidity 变量数据位置 Solidity 赋值数据位置Solidity 函数
Solidity 函数 Solidity 函数返回值 Solidity pure函数 Solidity view函数 Solidity 构造函数 solidity 函数修改器 Solidity 函数重载 Solidity 数学函数 Solidity 加密函数Solidity 进阶编程
Solidity 事件 Solidity 不可变量 Solidity 日志 Solidity 继承 Solidity 多重继承 多重继承的构造函数 Solidity 调用父类函数 Solidity 异常处理 Solidity 编程风格 Solidity 访问权限 Solidity 存储位置 Solidity 引用类型 Solidity 值类型 Solidity 值类型与引用类型 Solidity 合约结构 Solidity 编写智能合约 Solidity delete Solidity 0.6 重大变化 Solidity transfer 转账 Solidity transfer send Solidity 单位 Solidity constant Solidity this & sender Solidity address Solidity 众筹智能合约 Solidity interface solidity gas使用模式 Solidity 常见编译错误 Solidity 调用合约 Solidity 支付Eth Solidity fallback Solidity receive Solidty 钱包合约 Solidity 发送Eth Solidity 自毁合约 Solidity 哈希算法 Solidity 工厂合约 Solidity 库合约 Solidity 权限控制合约 Solidity 验证签名Solidity 引用类型
本章节主要介绍 solidity 中引用类型的属性和注意点,引用类型包括: 可变字节数组,数组,结构体。
1. 可变字节数组
- string:是一个动态尺寸的utf-8编码字符串,他其实是一个特殊的可变字节数组,同时其也是一个引用类型
bytes:动态字节数组
注: 1.string并没有提供方法获取其字符串长度,也没提供方法修改某个索引的字节码,但是可以把string转换成bytes进行相应的操作(例如:bytes(XXX).length ; bytes(XXX)[0]=a)
2.可变字节数组创建方式:bytes public a = new bytes(1);
3.清空字节数组的方式: (1)a.length = 0; (2)delete a;
4.push方法:例如 a.push(b) 往字节数组添加字节
5.字节数组与字符串之间的转换 动态大小字节数组—>string 固定大小字节数组—>动态大小字节数组—>string
a.固定字节数组转动态字节数组如下:
contract Test{
bytes4 public a = 0x54657374;
function test1() constant returns(bytes){
bytes memory b = new bytes(a.length);//创建可变字节数组
for(uint i = 0;i<a.length;i++){
b[i] = a[i];
}
return b;
}
}
b.动态字节数组转string如下:
function getString() constant returns(string){
return string(test1());
}
2. 数组
1. 固定长度数组:声明方式uint[5] T = [1,2,3,4,5];
2. 可变长度数组:
方式1. uint [] T = [1,2,3,4,5];
方式2.uint [] T = new uint[](5);
注:固定长度数组创建后不可对长度进行修改,但是可以对内容进行修改(这是与不可变字节数组之间不同点)
3. 二维数组:
uint [2][3] T = [[1,2],[3,4],[5,6]];
T.length 为 3
这点与java不同,java创建则是 [[1,2,3],[4,5,6]]
注:uint[2][] T = new uint[2][] (n); 创建新数组
注:
1.uint [] memory a = new uint;
用此方式创建数组时,若数组为成员变量, 则默认为storage类型;若为局部变量默认为memory类型,memory类型的数组长度创建后不可变。
contract T {
uint[] memory b = new uint[](5);//错误,状态类型只能是storage
function test(){
uint[] memory a = new uint[](5);
a[5] = 8;
//a.length = 6; 错误
}
}
2.数组内元素类型转换(看下面列子)
contract T {
function t() public {
s([1,2]);
}
function s(uint[2] _arr) public {
}
}
正常看到上方代码应该没什么问题,但是注意:函数 s 中数组类型是uint256,而函数 t 中输入的数组类型是uint8, 这里需要将 uint8 转换一下s([uint(1),2]);
3. 结构体
contract T{
struct Test{
uint a;
uint b;
}
}
将一个 struct 赋值给一个局部变量(默认是storage类型),实际是拷贝的引用,所以修改局部变量值时,会影响到原变量。
初始化:Test t = Test(1,2);
下一章:Solidity 值类型
本章节主要详细介绍solidity中值类型的属性以及注意点,包括: Boolean,Integer,Address,定长字节数组,Enums。1. Boolean类型bool: 可以取值 true和 false。对 ...
AI 中文社