memory:使用的是值传递,默认使用的是memory,传递的是值

storage:引用传递,传过来的是指针,后面一定要加上internal,private

pragma   solidity  ^0.4.;
contract Person {
string _name; //一个构造函数
function Person(string name) {
_name=name;
} function f() {
modify(_name)
} //如果是storage的话,指针传递,后面要加internal,或者是private类型,不能是public的类型,而且传进来的name长度是固定,不能直接给她赋值,可以修改这个name的某个值[0],[1]等吗
//传进来的是指针name,下面修改的话是可以修改name的值的
//我们传过来的形参默认是memory类型,这个memory类型分相当于是值传递,如果使用storage的话,相当于是使用的指针,指针的话是可以改变这个_name的值,并且执行name方法的时候,是可以看到这个_name改变之后的值
function modify(string storage name) internal{
bytes(name)[]='L'//传过来的第0个修改成大写,只能修改这个值的某个,不能全部比如name="yunxin"是不可以的 } //当执行f方法之前的话,如果传进的参会时是Li,执行f函数之后调用这个方法,那么这个首字母大写
//那么之后的值是li,在调用name就可以返回这个值出来
function name() constant returns (string) {
return _name;
}
} //当使用的是storage的时候,传进来的是name这个指针,而不是这个值

memory就是值传递,如果形参是memory的时候,它是传递,不会修改原来的值,默认使用的是memory

如果是storage类型的话,函数只能是internal,private,修改原来传过来的值,bytes(name)[1]='L'
storage:如果使用这个的话,这所在的方法(function)在外部是看不见的,通过另一个函数才可以调用,引用传递

pragma  solidity  ^0.4.;

contract  Test{
string public _name; function set(string name) public{
_name=name;
}
function set1(string a){
modify(a);
} function modify(string b) internal{
_name=b;//修改_name整个值,修改完之后调用get方法,_name,就会是修改好的值了 }
function get()constant public returns(string){
return _name;
} }

storage和memory的更多相关文章

  1. MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size

    http://dev.mysql.com/doc/refman/5.7/en/create-table.html You can use the TEMPORARY keyword when crea ...

  2. solidity中的memory和 storage详解

    Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上.这里我会讲解一下关键字storage和memory的区别. storage的结构是在合约部署创建时,根据你的合约中状 ...

  3. interrupt & storage & DMA

    1.Interrupt: The occurrence of an event is usually signaled by aninterrupt from either the hardware ...

  4. C++ TUTORIAL - MEMORY ALLOCATION - 2016

    http://www.bogotobogo.com/cplusplus/memoryallocation.php Variables and Memory Variables represent st ...

  5. Cache memory power reduction techniques

    Methods and apparatus to provide for power consumption reduction in memories (such as cache memories ...

  6. Vulkan Device Memory

    1.通过下面的接口,可以获得显卡支持的所有内存类型: MemoryType的类型如下: 2.引用索引3对内存的描述 我们可以通过调用vkGetPhysicalDeviceMemoryPropertie ...

  7. BPF for storage:一种受外核启发的反式

    BPF for storage:一种受外核启发的反式 译自:BPF for storage: an exokernel-inspired approach BPF主要用于报文处理,通过绕过网络栈提高报 ...

  8. uC/OS-II全局变量定义

    /*************************************************************************************************** ...

  9. MYSQL数据表操作语句

    1.查看某数据库中的表 SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern'] SHOW TABLES列举了给定数据库中的非TEMPORARY表.也可以使 ...

随机推荐

  1. BZOJ4034: [HAOI2015]树上操作

    这题把我写吐了...代码水平还是太弱鸡了啊... 这题就是先给你一些点,以及点权.然后给你一些向边构成一颗树,树的根节点是1. 然后给定三个操作 第一个是把指定节点的权值+W 第二个是把指定节点X为根 ...

  2. vue中使用Base64和md5和rsa

    https://blog.csdn.net/benben513624/article/details/88113459(copy) https://www.cnblogs.com/myfate/p/1 ...

  3. Unit 4.css的导入方式和选择器

    一.什么是css CSS是指层叠样式表(Cascading Style Sheets),样式定义如何显示HTML元素,样式通常又会存在于样式表中.也就是说把HTML元素的样式都统一收集起来写在一个地方 ...

  4. ViewPager + TabLayout + Fragment + MediaPlayer的使用

    效果图 在gradle里导包  implementation 'com.android.support:design:28.0.0' activity_main <?xml version=&q ...

  5. Shell命令-系统信息及显示之dmesg、uptime

    文件及内容处理 - dmesg.uptime 1. dmesg:显示开机信息 dmesg命令的功能说明 dmesg 命令用于显示开机信息.kernel 会将开机信息存储在 ring buffer 中. ...

  6. RfcConfig 类 主要解决Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986

    tomcat 8.0以后对请求URL做了严格的过滤 就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z).数字(0-9).-_.~4 ...

  7. 基于前后端分离的身份认证方式——JWT

    什么是JWT JWT--Json web token 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应用授权. 现在一般都用redis来出来token做 ...

  8. 【洛谷P3389 【模板】高斯消元法】

    这是个版子题,当然本蒟蒻也是看了好几天才明白 对于这样的线性方程组,我们可以看成是一个矩阵 对于百度百科给的定义(我感到很迷)赶脚和行列式有的一拼 但我们要注意的是: 行列式是一个确切的值(有关行列式 ...

  9. 什么是Tensor

    https://blog.csdn.net/kansas_lh/article/details/79321234 tensor是tensorflow基础的一个概念——张量. Tensorflow用到了 ...

  10. jdbc批处理进行多条数据插入

    package cn.linjun.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.S ...