ethereum(以太坊)(四)--值传递与引用传递
2024-09-07 18:54:46
contract Person { string public _name; function Person() {
_name = "liyuechun";
} function f() { modifyName(_name);
} /*storage(指针传递)
当函数参数为memory类型时,相当于值传递,而storage类型的函数参数将是指针传递。 如果想要在modifyName函数中通过传递过来的指针修改_name的值,那么必须将函数参数的类型显示设置为storage类型,storage类型拷贝的不是值,而是_name指针,
当调用modifyName(_name)函数时,相当于同时有_name,name,name1三个指针同时指向同一个对象,
我们可以通过三个指针中的任何一个指针修改他们共同指向的内容的值。
引用传递,改变了_name的值'Liyuechun'
function modifyName(string storage name) internal { var name1 = name; //var直接将name的状态类型赋值给name1(string) var i=0 == uint8 i =0
bytes(name1)[0] = 'L';
} 任何函数参数当它的类型为引用类型时,这个函数参数都默认为memory类型,memory类型的变量会临时拷贝一份值存储到内存中,
当我们将这个参数值赋给一个新的变量,并尝试去修改这个新的变量的值时,最原始的变量的值并不会发生变化
值传递,_name "liyuechun" 未改变
*/
function modifyName(string memory name) public { var name1 = name;
bytes(name1)[0] = 'L';
}
}
值类型(Value Type)
布尔(bool)
整型(integer)
地址(address)
定长字节数组(fixed byte arrays)
有理数和整型(Rational and Integer,String literals)
枚举类型(Enums)
函数(Functions Types) 值类型传递时,会临时拷贝一份内容出来,而不是拷贝指针,当你修改新的变量时,不会影响原来的变量的值 引用类型(Reference Types)
不定长字节数组(bytes)
字符串(string)
数组(Array)
结构体(Struts) 引用类型,赋值时,可以值传递,也可以引用(地址传递)
值传递: 当你修改新的变量时,不会影响原来的变量的值
引用传递: 当你修改新变量时,原来变量的值会跟着变化,这是因为新/旧变量指向同一个地址的原因。
最新文章
- ASP.NET中Onclick和OnserverClick事件的区别
- Drupal网站开发实践系列
- 孙鑫MFC学习笔记11:保存图像
- 深度技术32位Win7系统Ghost版2014年
- js的Array的map和sort实现方法
- Mono addin 学习笔记 5 TypeExtensionPoint
- 百度地图API示例之根据城市名设置地图中心点
- nodejs express 框架解密5-视图
- C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)
- Python 删除列表中的重复数据
- asp.net ";callback"; 和 ";postback"; 的区别.
- Android得知Scroller(两)——ViewGroup转让scrollTo()
- AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机
- asp.net MVC2.0学习笔记
- clion idea jetbrain windows下搞c/c++
- spring 入门级程序示例
- CF1129B 【Wrong Answer】
- Redis实战阅读笔记——第二章(redis重构web)
- leetcode — rotate-image
- Immediate Decodability HDU1305