1. 程式人生 > >ethereum(以太坊)(四)--值傳遞與引用傳遞

ethereum(以太坊)(四)--值傳遞與引用傳遞

pragma solidity ^0.4.0;

// priveta public internal

contract Test{
uint public _age;
function Test(uint age){ _age = age; } function f(){ modify(_age); } function modify(uint age){ age =100; } //function age() constant returns(uint){
// return _age; //} } contract Person{ string _name; function Person(string name){ _name = name; } function f(){ modify(_name); } function modify(string storage name) internal { //name = 'eilinge'; //memory:值傳遞__https://pan.baidu.com/s/1cPn4aoXKeYZzD2cG15s28A,storage+internal+bytes():
     //引用傳遞__https://pan.baidu.com/s/1TO-1iAutc317VWp5iTS11g
bytes(name)[0] = 'L'; } function name() constant returns(string){ return _name; } }
值型別(Value Type)
    布林(bool)
    整型(integer)
    地址(address)
    定長位元組陣列(fixed byte arrays)
    有理數和整型(Rational and Integer,String literals)
    列舉型別(Enums)
    函式(Functions Types)

    值型別傳遞時,會臨時拷貝一份內容出來,而不是拷貝指標,當你修改新的變數時,不會影響原來的變數的值 

引用型別(Reference Types)
    不定長位元組陣列(bytes)
    字串(string)
    陣列(Array)
    結構體(Struts)
    
    引用型別,賦值時,可以值傳遞,也可以引用(地址傳遞)
        值傳遞:      當你修改新的變數時,不會影響原來的變數的值 
        引用傳遞:    當你修改新變數時,原來變數的值會跟著變化,這是因為新/舊變數指向同一個地址的原因。