1. 程式人生 > >solidity智慧合約[40]-memory屬性

solidity智慧合約[40]-memory屬性

memory引入

函式中結構體變數預設是是storage型別

下面是一段錯誤的程式碼,錯誤的原因在於,init函式中,student s 預設會加上storage的屬性,但是storage屬性必須要引用storage空間中的狀態變數。但是例項化的student(100,“jackson”)並不在storage中。

1
2
3
4
5
6
7
8
9
struct student{
    uint grade;
    string name;
}

function init() public pure returns(uint,string){

    student  s = student(100,"jackson");
    return (s.grade,s.name);
}

因此,正確的做法是,必須要變數的初始化放在memory空間中。加上了memory屬性的變數,意味著變數儲存在memory的空間中。

1
2
3
4
5
6
7
8
9
struct student{
    uint grade;
    string name;
}

function init() public pure returns(uint,string){

    student memory s = student(100,"jackson");
    return (s.grade,s.name);
}

image.png