solidity基础语法(以太坊solidity合约)
solidity基础语法(以太坊solidity合约)
- 1-值类型和取值范围
- 2-引用类型
- 3-引用类型高阶
- 4-固定数组和动态数组
1-值类型和取值范围
https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency
https://learnblockchain.cn/docs/solidity/types.html
定长数组是值类型,不定长数组是引用类型
String也是引用类型
字符串、不定长数组及结构体都是引用类型
当部署出现问题等等,但代码无错时,尝试离开网站,再次进入重新编译部署
注意solidity版本
值类型修改_a不会影响到_b,只是值的复制
而引用类型则是会影响的
Demo1和demo2的合约区分类型unit
pragma solidity >=0.4.0 =0.6.1 函数调用完毕后消失 // 2: 状态,全局变量 ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略) // 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定) // 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针 // 注意:在版本0.5.0之前,数据位置可以省略,在0.5.0之后需要指定 contract RefType{ function modifyName(string memory name) pure public returns(string memory){ // 声明临时string类型的变量 // string memory name1 = name; // // string是可变量的,但是可以先强转为字符数组 // bytes(name1)[0] = 'J'; string memory name1 = name; bytes(name)[0] = 'J'; return name1; } }
修改name1返回name1,值变了
修改name返回name1则和上面的结果一样
相同的引用类型是指针复制
即传入的string memory name和赋值string memory name1 = name;都是相同的引用类型,是指针赋值
引用类型必须指定数据存储位置,数据存储位置还会影响引用类型之间的赋值
3-引用类型高阶
如果是引用类型,并且它的数据位置是memary,则其传递的是指针,没有产生相应的副本
pragma solidity >=0.6.1 storage name1 传递的是指针 // string storage name1 = name; // storage name --> memory name1 传递的是数据的副本 string memory name1 = name; bytes(name1)[0] = 'S'; } } string public _name = "solidity"; //加入的public为访问修饰符,若不加,编译部署后,在左下测无此变量 // 1: solidity: 数据类型:值类型,引用类型 (数组、结构体,映射、字符串(bytes数组) 有些合约需要存储到分布式账本,所以在solidity中不但有数据类型还有数据类型所存的位置,存储位置针对引用类型和值类型无关 // 2: 值传递是副本,而引用类型既可传递指针,也可传递副本(传递规则受数据位置影响) // 3: 三种位置,先掌握内存与存储变量 // 1: 内存,局部变量 --> 函数调用完毕后消失 // 2: 状态,全局变量 ---> 随着合约部署到区块链中(以太坊分布式账本) // 3: 调用数据 (暂时理解成内存变量 略) // 4: 默认的函数参数,包括返回的参数,他们默认是memory。默认的局部变量是storage。而状态变量肯定是storage(不用指定) // 5: 不同数据位置的引用类型赋值会创建副本,而相同数据位置引用类型仅仅赋值指针
状态变量默认是storyge存储类型的
4-固定数组和动态数组
pragma solidity >=0.6.0
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。